--- vadddomain.old.c	Sun Sep 30 15:27:36 2001
+++ vadddomain.c	Sun Sep 30 15:45:14 2001
@@ -45,6 +45,7 @@
 char a_dir[MAX_BUFF];
 int  Apop;
 int  Bounce;
+int Random;
 uid_t Uid;
 gid_t Gid;
 uid_t a_uid;
@@ -62,7 +63,7 @@
 
 	get_options(argc,argv);
 
-	if ( strlen(Passwd) <= 0 ) {
+	if ( (strlen(Passwd) <= 0 ) && (Random == 0)) {
 		strncpy( Passwd, vgetpasswd("postmaster"), MAX_BUFF);
 	}
 
@@ -96,6 +97,9 @@
 			printf("Invalid bounce email address %s\n", BounceEmail);
 		}
 	}
+	if (Random) 	
+		printf("Postmaster passsword: %s\n", Passwd);
+
 	vexit(0);
 }
 
@@ -113,16 +117,20 @@
 	printf("         -a sets the account to use APOP, default is POP\n");
 	printf("         -O optimize adding, for bulk adds set this for all\n");
 	printf("            except the last one\n");
+	printf("	 -r generates random password\n");
 	exit(0);
 }
 
 void get_options(int argc,char **argv)
 {
- int c;
+ int c, i = 0;
  int errflag;
  struct passwd *mypw;
  extern char *optarg;
  extern int optind;
+ static char const chars[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.";
+ char pwtmp[20];
+
 
     memset(Domain, 0, MAX_BUFF);
     memset(Passwd, 0, MAX_BUFF);
@@ -136,7 +144,7 @@
     Bounce = 1;
 
     errflag = 0;
-    while( !errflag && (c=getopt(argc,argv,"aq:be:u:vi:g:d:O")) != -1 ) {
+    while( !errflag && (c=getopt(argc,argv,"raq:be:u:vi:g:d:O")) != -1 ) {
 	switch(c) {
 	case 'v':
 	    printf("version: %s\n", VERSION);
@@ -168,6 +176,8 @@
 	case 'O':
             OptimizeAddDomain = 1;
 	    break;
+	case 'r':
+	    Random = 1;
 	default:
 	    errflag = 1;
 	    break;
@@ -179,7 +189,7 @@
 	++optind;
     }
 
-    if ( optind < argc ) {
+    if ( (optind < argc ) && ( Random == 0)) {
 	strncpy(Passwd, argv[optind], MAX_BUFF);
 	++optind;
     }
@@ -195,6 +205,13 @@
 	    printf("Error: user %s not found in /etc/passwd\n", User);
 	    exit(-1);
 	}
+    }
+    if (Random) {
+	for (i = 0; i < 12; i++)
+		pwtmp[i] = chars[arc4random() % 63];
+
+	pwtmp[i] = '\0';
+	strcpy(Passwd, pwtmp);
     }
     if ( Dir[0] == 0 ) strncpy(Dir, VPOPMAILDIR, MAX_BUFF);
     if ( Domain[0] == 0 ) usage();
--- vadduser.old.c	Sun Sep 30 08:27:33 2001
+++ vadduser.c	Sun Sep 30 15:41:34 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 ) { 
