--- vadduser.old.c	Sun Sep 30 08:27:33 2001
+++ vadduser.c	Sun Sep 30 08:27:12 2001
@@ -44,6 +44,7 @@
 char TmpBuf1[MAX_BUFF];
 int apop;
 int NoPassword = 0;
+int Random = 0;
 
 void usage();
 void get_options(int argc,char **argv);
@@ -62,7 +63,7 @@
 	if ( Gecos[0] == 0 ) strncpy(Gecos, User, MAX_BUFF);
 
 	/* get the password if not set on command line */
-        if ( NoPassword == 0 ) {
+        if ( (NoPassword == 0) && (Random == 0)) {
 	    if ( strlen(Passwd) <= 0 ) {
                 strncpy(Passwd,vgetpasswd(Email),MAX_BUFF);
             }
@@ -90,6 +91,9 @@
             vauth_setpw( vpw, Domain);
         }
 
+	if (Random) 
+		printf("Random password: %s\n", Passwd);
+
 	vexit(0);
 }
 
@@ -103,14 +107,17 @@
 	printf("         -c comment (sets the gecos comment field)\n");
 	printf("         -e standard_encrypted_password\n");
 	printf("         -n no_password\n");
+	printf("	 -r random generates password\n");
 }
 
 void get_options(int argc,char **argv)
 {
- int c;
+ int c, i = 0;
  int errflag;
  extern char *optarg;
  extern int optind;
+ static char const chars[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.";
+ char pwtmp[20];
 
 	memset(Email, 0, MAX_BUFF);
 	memset(Passwd, 0, MAX_BUFF);
@@ -121,7 +128,7 @@
 	apop = USE_POP; 
 
 	errflag = 0;
-    while( !errflag && (c=getopt(argc,argv,"svc:nq:e:")) != -1 ) {
+    while( !errflag && (c=getopt(argc,argv,"rsvc:nq:e:")) != -1 ) {
 		switch(c) {
 			case 'v':
 				printf("version: %s\n", VERSION);
@@ -141,6 +148,9 @@
 			case 'n':
 				NoPassword = 1;
 				break;
+			case 'r':
+				Random = 1;
+				break;
 			default:
 				errflag = 1;
 				break;
@@ -152,9 +162,17 @@
 		++optind;
 	}
 
-	if ( (NoPassword == 0) && (optind < argc) ) {
+	if ( (NoPassword == 0) && (optind < argc) && (Random == 0)) {
 		strncpy(Passwd, argv[optind], MAX_BUFF);
 		++optind;
+	}
+
+	if (Random) {
+		for (i = 0; i < 12; i++)
+        	        pwtmp[i] = chars[arc4random() % 63];
+
+	        pwtmp[i] = '\0';
+		strcpy(Passwd, pwtmp);
 	}
 
 	if ( Email[0] == 0 ) { 
