Do not leave core files on "umkpasswd --help".
[ircu2.10.12-pk.git] / ircd / umkpasswd.c
index 56d24dccdfc456b5473f8c69bc6b3fb8c7803a5c..d3ef4e5b2fa9e400963109f756ad6fe534628447 100644 (file)
 #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)
 {
@@ -95,13 +103,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 +140,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,12 +175,40 @@ 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;
 }
 
+char *basename_into(char *tmp, char *target)
+{
+  unsigned int len, ii;
+
+  len = strlen(tmp);
+  for (ii = len; ii > 0; )
+    if (tmp[--ii] == '/')
+      break;
+  if (ii < len - 1)
+    return tmp + ii + (tmp[ii] == '/');
+  else if (tmp[ii] != '/')
+    return tmp;
+  else if (ii == 0)
+    return tmp;
+  else
+  {
+    while (ii > 0)
+      if (tmp[--ii] == '/')
+         break;
+    if (tmp[ii] == '/')
+        ii++;
+    for (len = 0; tmp[ii] != '/'; )
+      target[len++] = tmp[ii++];
+    target[len] = '\0';
+    return target;
+  }
+}
+
 void sum(char* tmp)
 {
 FILE* file;
@@ -171,13 +218,13 @@ unsigned char buffer[1024], digest[16];
 
  if (NULL == (file = fopen(tmp, "r")))
   exit(0);
- MD5Name(MD5Init)(&context);
+ MD5Init(&context);
  while ((len = fread (buffer, 1, 1024, file)))
-  MD5Name(MD5Update)(&context, buffer, len);
- MD5Name(MD5Final)(digest, &context);
+  MD5Update(&context, buffer, len);
+ MD5Final(digest, &context);
  fclose(file);
 
- printf("%s: ", basename(tmp));
+ printf("%s: ", basename_into(tmp, (char*)buffer));
  for (len = 0; len < 16; len++)
   printf ("%02x", digest[len]);
  printf("\n");
@@ -263,7 +310,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));
@@ -309,9 +356,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 +387,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 +400,7 @@ const char* options = "a:d:lm:u:y:5:";
    default:
     /* unknown option - spit out syntax and b0rk */
     show_help();
-    abort();
+    exit(1);
    break;
   }
  }