*/
#include "config.h"
#include <unistd.h>
+#include <ctype.h>
#include <stdio.h>
#include <stdarg.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
-#include <assert.h>
-#include <libgen.h>
+/* #include <assert.h> -- 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"
/* 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)
{
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));
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)
}
/* 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;
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 */
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));
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));
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);
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 */
}
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 */
}
default:
/* unknown option - spit out syntax and b0rk */
show_help();
- abort();
+ exit(1);
break;
}
}