X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=ircd%2Fumkpasswd.c;h=30d4130af6e09f878a3ca164a5570144683820e9;hb=1570a04e15bec6b2945e4351b1e05211aecdcacc;hp=8ad0e1f68213d3f1ceb11c08eaf9e01bc2862958;hpb=9170762c2e7dc3c06729f6d3c87d7087c7cde0b4;p=ircu2.10.12-pk.git diff --git a/ircd/umkpasswd.c b/ircd/umkpasswd.c index 8ad0e1f..30d4130 100644 --- a/ircd/umkpasswd.c +++ b/ircd/umkpasswd.c @@ -20,17 +20,18 @@ */ #include "config.h" #include +#include #include #include #include #include #include #include -#include -#include +/* #include -- Now using assert in ircd_log.h */ /* ircu headers */ #include "ircd_alloc.h" +#include "ircd_log.h" /* for ircd's assert.h */ #include "ircd_string.h" #include "umkpasswd.h" #include "s_debug.h" @@ -45,6 +46,14 @@ /* bleah, evil globals */ umkpasswd_conf_t* umkpasswd_conf; crypt_mechs_t* crypt_mechs_root; +int log_inassert = 0; +time_t CurrentTime; + +void sendto_opmask_butone(struct Client *one, unsigned int mask, + const char *pattern, ...) +{ + /* only needed with memdebug, which also calls Debug() */ +} void copyright(void) { @@ -95,13 +104,24 @@ int err = errno; errno = err; } +/* quick implementation of log_write() for assert() call */ +void log_write(enum LogSys subsys, enum LogLevel severity, + unsigned int flags, const char *fmt, ...) +{ + va_list vl; + va_start(vl, fmt); + vfprintf(stderr, fmt, vl); + fprintf(stderr, "\n"); + va_end(vl); +} + /* quick and dirty salt generator */ char *make_salt(const char *salts) { char *tmp = NULL; long int n = 0; - /* try and get around them running this time after time in quick sucession */ + /* try and get around them running this time after time in quick succession */ sleep(1); srandom((unsigned int)time(NULL)); @@ -121,12 +141,12 @@ long int n = 0; return tmp; } -/* our implemenation of ircd_crypt_register_mech() */ +/* our implementation of ircd_crypt_register_mech() */ int ircd_crypt_register_mech(crypt_mech_t* mechanism) { crypt_mechs_t* crypt_mech; - Debug((DEBUG_INFO, "ircd_crypt_register_mech: resistering mechanism: %s", mechanism->shortname)); + Debug((DEBUG_INFO, "ircd_crypt_register_mech: registering mechanism: %s", mechanism->shortname)); /* try to allocate some memory for the new mechanism */ if ((crypt_mech = (crypt_mechs_t*)MyMalloc(sizeof(crypt_mechs_t))) == NULL) @@ -156,7 +176,7 @@ crypt_mechs_t* crypt_mech; } /* we're done */ - Debug((DEBUG_INFO, "ircd_crypt_register_mech: resistered mechanism: %s, crypt_function is at 0x%X.", crypt_mech->mech->shortname, &crypt_mech->mech->crypt_function)); + Debug((DEBUG_INFO, "ircd_crypt_register_mech: registered mechanism: %s, crypt_function is at 0x%X.", crypt_mech->mech->shortname, &crypt_mech->mech->crypt_function)); Debug((DEBUG_INFO, "ircd_crypt_register_mech: %s: %s", crypt_mech->mech->shortname, crypt_mech->mech->description)); return 0; @@ -164,24 +184,44 @@ return 0; void sum(char* tmp) { +char* str; FILE* file; MD5_CTX context; int len; -unsigned char buffer[1024], digest[16]; +unsigned char buffer[1024], digest[16], vstr[32]; +vstr[0] = '\0'; + str = tmp + strlen(tmp); + while (str[-1] == '\r' || str[-1] == '\n') *--str = '\0'; if (NULL == (file = fopen(tmp, "r"))) + { + fprintf(stderr, "unable to open %s: %s", tmp, strerror(errno)); exit(0); - MD5Name(MD5Init)(&context); - while (len = fread (buffer, 1, 1024, file)) - MD5Name(MD5Update)(&context, buffer, len); - MD5Name(MD5Final)(digest, &context); + } + MD5Init(&context); + while ((fgets((char*)buffer, sizeof(buffer), file)) != NULL) + { + MD5Update(&context, buffer, strlen((char*)buffer)); + str = strstr((char*)buffer, "$Id: "); + if (str != NULL) + { + for (str += 5; !isspace(*str); ++str) {} + while (isspace(*++str)) {} + for (len = 0; !isspace(str[len]); ++len) vstr[len] = str[len]; + vstr[len] = '\0'; + break; + } + } + while ((len = fread (buffer, 1, sizeof(buffer), file))) + MD5Update(&context, buffer, len); + MD5Final(digest, &context); fclose(file); - printf("%s: ", basename(tmp)); + str = strrchr(tmp, '/'); + printf(" \"[ %s: ", str ? (str + 1) : tmp); for (len = 0; len < 16; len++) printf ("%02x", digest[len]); - printf("\n"); - exit(0); + printf(" %s ]\",\n", vstr); } /* dump the loaded mechs list */ @@ -263,7 +303,7 @@ char* salt, *untagged, *tagged; salt = make_salt(default_salts); untagged = (char *)CryptFunc(crypt_mech->mech)(pw, salt); - tagged = (char *)MyMalloc(strlen(salt)+CryptTokSize(crypt_mech->mech)+1); + tagged = (char *)MyMalloc(strlen(untagged)+CryptTokSize(crypt_mech->mech)+1); memset(tagged, 0, strlen(untagged)+CryptTokSize(crypt_mech->mech)+1); strncpy(tagged, CryptTok(crypt_mech->mech), CryptTokSize(crypt_mech->mech)); strncpy(tagged+CryptTokSize(crypt_mech->mech), untagged, strlen(untagged)); @@ -274,7 +314,7 @@ return tagged; char* parse_arguments(int argc, char **argv) { int len = 0, c = 0; -const char* options = "a:d:lm:u:y:5:"; +const char* options = "a:d:lm:u:y:5"; umkpasswd_conf = (umkpasswd_conf_t*)MyMalloc(sizeof(umkpasswd_conf_t)); @@ -299,8 +339,11 @@ const char* options = "a:d:lm:u:y:5:"; switch (c) { case '5': - sum(optarg); - break; + { + char t1[1024]; + while (fgets(t1, sizeof(t1), stdin)) sum(t1); + } + exit(0); case 'y': umkpasswd_conf->operclass = atoi(optarg); @@ -309,9 +352,9 @@ const char* options = "a:d:lm:u:y:5:"; break; case 'u': - if(umkpasswd_conf->flags && ACT_UPDOPER) + if(umkpasswd_conf->flags & ACT_ADDOPER) { - fprintf(stderr, "-a and -u are mutually exclussive. Use either or neither.\n"); + fprintf(stderr, "-a and -u are mutually exclusive. Use either or neither.\n"); abort(); /* b0rk b0rk b0rk */ } @@ -340,9 +383,9 @@ const char* options = "a:d:lm:u:y:5:"; break; case 'a': - if(umkpasswd_conf->flags && ACT_UPDOPER) + if(umkpasswd_conf->flags & ACT_UPDOPER) { - fprintf(stderr, "-a and -u are mutually exclussive. Use either or neither.\n"); + fprintf(stderr, "-a and -u are mutually exclusive. Use either or neither.\n"); abort(); /* b0rk b0rk b0rk */ } @@ -353,7 +396,7 @@ const char* options = "a:d:lm:u:y:5:"; default: /* unknown option - spit out syntax and b0rk */ show_help(); - abort(); + exit(1); break; } }