/* pwgen.c : Password generator - Jon Mayo - PUBLIC DOMAIN - June 1, 2003 */ #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <time.h> #include <limits.h> int main(int argc, char **argv) { const char pwtab_hard[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`!@#$%^&*()_+-=[]\\{}|;':\",./<>?"; const char pwtab_easy[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; const char pwtab_simple[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; const char pwtab_trivial[] = "0123456789abcdefghijklmnopqrstuvwxyz"; const char pwtab_pathetic[] = "abcdefghijklmnopqrstuvwxyz"; const char pwtab_joke[] = "0123456789"; const char *pwtab; int pwtab_len; int min=6; int max=8; int cnt; int i; int easyness=0; srand(time(NULL)+getpid()); for(i=1;i<argc;i++) { int j; char ch; if(argv[i][0]=='-') { for(j=1;argv[i][j];j++) { switch(ch=argv[i][j]) { case 'V': /* version */ fprintf(stderr,"Version 1.0\nThis software is under PUBLIC DOMAIN.\n"); exit(EXIT_SUCCESS); break; case 'h': /* help */ fprintf(stderr,"usage: %s [-hVs] [-m min] [-l max]\n\n-V\tversion\n-h\tThis help\n-s\tmake the password simplier(specify multiple times for very simple)\n\t(hard, easy, simple, trivial, pathetic, joke)\n-m\tminimum length\n-l\tmaximum length\n\n",argv[0]); exit(EXIT_SUCCESS); break; case 's': easyness++; /* simplier */ break; case 'm': i++; min=strtol(argv[i],NULL,0); j=-1; break; case 'l': i++; max=strtol(argv[i],NULL,0); j=-1; break; default: fprintf(stderr,"Option %c unknown.\n",ch); } if(j==-1) break; /* bleh */ } } } if(max<min) max=min; if(min<=0) { fprintf(stderr,"min and max must be between 1 and %d\n",INT_MAX); return EXIT_FAILURE; /* bleh */ } cnt=(rand() % (max-min+1)) + min; switch(easyness) { case 0: /* hard */ pwtab=pwtab_hard; pwtab_len=sizeof pwtab_hard - 1; break; case 1: /* easy */ pwtab=pwtab_easy; pwtab_len=sizeof pwtab_easy - 1; break; case 2: /* simple */ pwtab=pwtab_simple; pwtab_len=sizeof pwtab_simple - 1; break; case 3: /* trivial */ pwtab=pwtab_trivial; pwtab_len=sizeof pwtab_trivial - 1; break; case 4: /* pathetic */ pwtab=pwtab_pathetic; pwtab_len=sizeof pwtab_pathetic - 1; break; default: case 5: /* joke */ pwtab=pwtab_joke; pwtab_len=sizeof pwtab_joke - 1; break; } for(i=0;i<cnt;i++) { printf("%c",pwtab[rand() % (pwtab_len)]); } printf("\n"); return EXIT_SUCCESS; }