Browse code

Added --management-forget-disconnect option -- forget passwords when management session disconnects (Alon Bar-Lev).

git-svn-id: http://svn.openvpn.net/projects/openvpn/branches/BETA21/openvpn@2652 e7ae566f-a301-0410-adde-c780ea21d3b5

james authored on 2008/01/23 09:19:51
Showing 6 changed files
... ...
@@ -2469,6 +2469,7 @@ open_management (struct context *c)
2469 2469
 			       c->options.management_state_buffer_size,
2470 2470
 			       c->options.management_hold,
2471 2471
 			       c->options.management_signal,
2472
+			       c->options.management_forget_disconnect,
2472 2473
 			       c->options.management_client,
2473 2474
 			       c->options.management_write_peer_info_file,
2474 2475
 			       c->options.remap_sigusr1))
... ...
@@ -1080,6 +1080,9 @@ man_reset_client_socket (struct management *man, const bool exiting)
1080 1080
     }
1081 1081
   if (!exiting)
1082 1082
     {
1083
+      if (man->settings.management_forget_disconnect)
1084
+	 ssl_purge_auth ();
1085
+
1083 1086
       if (man->settings.signal_on_disconnect) {
1084 1087
       	  int mysig = man_mod_signal (man, SIGUSR1);
1085 1088
 	  if (mysig >= 0)
... ...
@@ -1333,6 +1336,7 @@ man_settings_init (struct man_settings *ms,
1333 1333
 		   const int state_buffer_size,
1334 1334
 		   const bool hold,
1335 1335
 		   const bool signal_on_disconnect,
1336
+		   const bool management_forget_disconnect,
1336 1337
 		   const bool connect_as_client,
1337 1338
 		   const char *write_peer_info_file,
1338 1339
 		   const int remap_sigusr1)
... ...
@@ -1371,6 +1375,12 @@ man_settings_init (struct man_settings *ms,
1371 1371
       ms->signal_on_disconnect = signal_on_disconnect;
1372 1372
 
1373 1373
       /*
1374
+       * Should OpenVPN forget passwords when managmenet
1375
+       * session disconnects?
1376
+       */
1377
+      ms->management_forget_disconnect = management_forget_disconnect;
1378
+
1379
+      /*
1374 1380
        * Should OpenVPN connect to management interface as a client
1375 1381
        * rather than a server?
1376 1382
        */
... ...
@@ -1513,6 +1523,7 @@ management_open (struct management *man,
1513 1513
 		 const int state_buffer_size,
1514 1514
 		 const bool hold,
1515 1515
 		 const bool signal_on_disconnect,
1516
+		 const bool management_forget_disconnect,
1516 1517
 		 const bool connect_as_client,
1517 1518
 		 const char *write_peer_info_file,
1518 1519
 		 const int remap_sigusr1)
... ...
@@ -1534,6 +1545,7 @@ management_open (struct management *man,
1534 1534
 		     state_buffer_size,
1535 1535
 		     hold,
1536 1536
 		     signal_on_disconnect,
1537
+		     management_forget_disconnect,
1537 1538
 		     connect_as_client,
1538 1539
 		     write_peer_info_file,
1539 1540
 		     remap_sigusr1);
... ...
@@ -206,6 +206,7 @@ struct man_settings {
206 206
   bool server;
207 207
   bool hold;
208 208
   bool signal_on_disconnect;
209
+  bool management_forget_disconnect;
209 210
   bool connect_as_client;
210 211
   char *write_peer_info_file;
211 212
 
... ...
@@ -283,6 +284,7 @@ bool management_open (struct management *man,
283 283
 		      const int state_buffer_size,
284 284
 		      const bool hold,
285 285
 		      const bool signal_on_disconnect,
286
+		      const bool management_forget_disconnect,
286 287
 		      const bool connect_as_client,
287 288
 		      const char *write_peer_info_file,
288 289
 		      const int remap_sigusr1);
... ...
@@ -179,6 +179,7 @@ openvpn \- secure IP tunnel daemon.
179 179
 [\ \fB\-\-log\fR\ \fIfile\fR\ ]
180 180
 [\ \fB\-\-suppress-timestamps\fR\ ]
181 181
 [\ \fB\-\-lport\fR\ \fIport\fR\ ]
182
+[\ \fB\-\-management\-forget\-disconnect\fR\ ]
182 183
 [\ \fB\-\-management\-hold\fR\ ]
183 184
 [\ \fB\-\-management\-log\-cache\fR\ \fIn\fR\ ]
184 185
 [\ \fB\-\-management\-signal\fR\ ]
... ...
@@ -2325,6 +2326,15 @@ for inputs which ordinarily would have been queried from the
2325 2325
 console.
2326 2326
 .\"*********************************************************
2327 2327
 .TP
2328
+.B --management-forget-disconnect
2329
+Make OpenVPN forget passwords when management session
2330
+disconnects.
2331
+
2332
+This directive does not affect the
2333
+.B --http-proxy
2334
+username/password.  It is always cached.
2335
+.\"*********************************************************
2336
+.TP
2328 2337
 .B --management-hold
2329 2338
 Start OpenVPN in a hibernating state, until a client
2330 2339
 of the management interface explicitly starts it
... ...
@@ -318,6 +318,8 @@ static const char usage_message[] =
318 318
   "--management-hold : Start " PACKAGE_NAME " in a hibernating state, until a client\n"
319 319
   "                    of the management interface explicitly starts it.\n"
320 320
   "--management-signal : Issue SIGUSR1 when management disconnect event occurs.\n"
321
+  "--management-forget-disconnect : Forget passwords when management disconnect\n"
322
+  "                                 event occurs.\n"
321 323
   "--management-log-cache n : Cache n lines of log file history for usage\n"
322 324
   "                  by the management channel.\n"
323 325
 #endif
... ...
@@ -1202,6 +1204,7 @@ show_settings (const struct options *o)
1202 1202
   SHOW_BOOL (management_hold);
1203 1203
   SHOW_BOOL (management_client);
1204 1204
   SHOW_BOOL (management_signal);
1205
+  SHOW_BOOL (management_forget_disconnect);
1205 1206
   SHOW_STR (management_write_peer_info_file);
1206 1207
 #endif
1207 1208
 #ifdef ENABLE_PLUGIN
... ...
@@ -1527,7 +1530,8 @@ options_postprocess (struct options *options, bool first_time)
1527 1527
 #ifdef ENABLE_MANAGEMENT
1528 1528
   if (!options->management_addr &&
1529 1529
       (options->management_query_passwords || options->management_hold || options->management_signal
1530
-       || options->management_client || options->management_write_peer_info_file
1530
+       || options->management_forget_disconnect || options->management_client
1531
+       || options->management_write_peer_info_file
1531 1532
        || options->management_log_history_cache != defaults.management_log_history_cache))
1532 1533
     msg (M_USAGE, "--management is not specified, however one or more options which modify the behavior of --management were specified");
1533 1534
 #endif
... ...
@@ -3152,6 +3156,11 @@ add_option (struct options *options,
3152 3152
       VERIFY_PERMISSION (OPT_P_GENERAL);
3153 3153
       options->management_signal = true;
3154 3154
     }
3155
+  else if (streq (p[0], "management-forget-disconnect"))
3156
+    {
3157
+      VERIFY_PERMISSION (OPT_P_GENERAL);
3158
+      options->management_forget_disconnect = true;
3159
+    }
3155 3160
   else if (streq (p[0], "management-client"))
3156 3161
     {
3157 3162
       VERIFY_PERMISSION (OPT_P_GENERAL);
... ...
@@ -284,6 +284,7 @@ struct options
284 284
   bool management_query_passwords;
285 285
   bool management_hold;
286 286
   bool management_signal;
287
+  bool management_forget_disconnect;
287 288
   bool management_client;
288 289
   const char *management_write_peer_info_file;
289 290
 #endif