Remove pthread.h from source. We should be using asterisk/lock.h everywhere instead...
[asterisk/asterisk.git] / res / res_crypto.c
index 8aa4e9d..4e12eb5 100755 (executable)
@@ -11,6 +11,7 @@
  * the GNU General Public License
  */
 
+#include <sys/types.h>
 #include <asterisk/file.h>
 #include <asterisk/channel.h>
 #include <asterisk/logger.h>
 #include <asterisk/md5.h>
 #include <asterisk/cli.h>
 #include <asterisk/io.h>
+#include <asterisk/lock.h>
 #include <openssl/ssl.h>
 #include <openssl/err.h>
 #include <stdio.h>
-#include <pthread.h>
 #include <dirent.h>
 #include <string.h>
 #include <errno.h>
+#include <unistd.h>
+#include <fcntl.h>
 #include "../asterisk.h"
+#include "../astconf.h"
 
 /*
  * Asterisk uses RSA keys with SHA-1 message digests for its
@@ -55,7 +59,7 @@
 static char base64[64];
 static char b2a[256];
 
-static pthread_mutex_t keylock = PTHREAD_MUTEX_INITIALIZER;
+AST_MUTEX_DEFINE_STATIC(keylock);
 
 #define KEY_NEEDS_PASSCODE (1 << 16)
 
@@ -81,11 +85,13 @@ struct ast_key {
 
 static struct ast_key *keys = NULL;
 
+
+#if 0
 static int fdprint(int fd, char *s)
 {
         return write(fd, s, strlen(s) + 1);
 }
-
+#endif
 static int pw_cb(char *buf, int size, int rwflag, void *userdata)
 {
        struct ast_key *key = (struct ast_key *)userdata;
@@ -114,7 +120,7 @@ static int pw_cb(char *buf, int size, int rwflag, void *userdata)
 struct ast_key *ast_key_get(char *kname, int ktype)
 {
        struct ast_key *key;
-       ast_pthread_mutex_lock(&keylock);
+       ast_mutex_lock(&keylock);
        key = keys;
        while(key) {
                if (!strcmp(kname, key->name) &&
@@ -122,7 +128,7 @@ struct ast_key *ast_key_get(char *kname, int ktype)
                        break;
                key = key->next;
        }
-       ast_pthread_mutex_unlock(&keylock);
+       ast_mutex_unlock(&keylock);
        return key;
 }
 
@@ -150,7 +156,7 @@ static struct ast_key *try_load_key (char *dir, char *fname, int ifd, int ofd, i
        /* Get actual filename */
        snprintf(ffname, sizeof(ffname), "%s/%s", dir, fname);
 
-       ast_pthread_mutex_lock(&keylock);
+       ast_mutex_lock(&keylock);
        key = keys;
        while(key) {
                /* Look for an existing version already */
@@ -158,7 +164,7 @@ static struct ast_key *try_load_key (char *dir, char *fname, int ifd, int ofd, i
                        break;
                key = key->next;
        }
-       ast_pthread_mutex_unlock(&keylock);
+       ast_mutex_unlock(&keylock);
 
        /* Open file */
        f = fopen(ffname, "r");
@@ -207,7 +213,7 @@ static struct ast_key *try_load_key (char *dir, char *fname, int ifd, int ofd, i
           fill it with what we know */
        /* Gotta lock if this one already exists */
        if (found)
-               ast_pthread_mutex_lock(&keylock);
+               ast_mutex_lock(&keylock);
        /* First the filename */
        strncpy(key->fn, ffname, sizeof(key->fn));
        /* Then the name */
@@ -256,12 +262,12 @@ static struct ast_key *try_load_key (char *dir, char *fname, int ifd, int ofd, i
                *not2 = 1;
        }
        if (found)
-               ast_pthread_mutex_unlock(&keylock);
+               ast_mutex_unlock(&keylock);
        if (!found) {
-               ast_pthread_mutex_lock(&keylock);
+               ast_mutex_lock(&keylock);
                key->next = keys;
                keys = key;
-               ast_pthread_mutex_unlock(&keylock);
+               ast_mutex_unlock(&keylock);
        }
        return key;
 }
@@ -399,7 +405,7 @@ int ast_sign(struct ast_key *key, char *msg, char *sig)
        }
 
        if (siglen != sizeof(dsig)) {
-               ast_log(LOG_WARNING, "Unexpected signature length %d, expecting %d\n", siglen, sizeof(dsig));
+               ast_log(LOG_WARNING, "Unexpected signature length %d, expecting %d\n", (int)siglen, (int)sizeof(dsig));
                return -1;
        }
 
@@ -425,7 +431,7 @@ int ast_check_signature(struct ast_key *key, char *msg, char *sig)
        /* Decode signature */
        res = base64decode(dsig, sig, sizeof(dsig));
        if (res != sizeof(dsig)) {
-               ast_log(LOG_WARNING, "Signature improper length (expect %d, got %d)\n", sizeof(dsig), res);
+               ast_log(LOG_WARNING, "Signature improper length (expect %d, got %d)\n", (int)sizeof(dsig), (int)res);
                return -1;
        }
 
@@ -450,26 +456,26 @@ static void crypto_load(int ifd, int ofd)
        struct dirent *ent;
        int note = 0;
        /* Mark all keys for deletion */
-       ast_pthread_mutex_lock(&keylock);
+       ast_mutex_lock(&keylock);
        key = keys;
        while(key) {
                key->delme = 1;
                key = key->next;
        }
-       ast_pthread_mutex_unlock(&keylock);
+       ast_mutex_unlock(&keylock);
        /* Load new keys */
-       dir = opendir(AST_KEY_DIR);
+       dir = opendir((char *)ast_config_AST_KEY_DIR);
        if (dir) {
                while((ent = readdir(dir))) {
-                       try_load_key(AST_KEY_DIR, ent->d_name, ifd, ofd, &note);
+                       try_load_key((char *)ast_config_AST_KEY_DIR, ent->d_name, ifd, ofd, &note);
                }
                closedir(dir);
        } else
-               ast_log(LOG_WARNING, "Unable to open key directory '%s'\n", AST_KEY_DIR);
+               ast_log(LOG_WARNING, "Unable to open key directory '%s'\n", (char *)ast_config_AST_KEY_DIR);
        if (note) {
                ast_log(LOG_NOTICE, "Please run the command 'init keys' to enter the passcodes for the keys\n");
        }
-       ast_pthread_mutex_lock(&keylock);
+       ast_mutex_lock(&keylock);
        key = keys;
        last = NULL;
        while(key) {
@@ -488,7 +494,7 @@ static void crypto_load(int ifd, int ofd)
                        last = key;
                key = nkey;
        }
-       ast_pthread_mutex_unlock(&keylock);
+       ast_mutex_unlock(&keylock);
 }
 
 static void md52sum(char *sum, unsigned char *md5)
@@ -503,7 +509,7 @@ static int show_keys(int fd, int argc, char *argv[])
        struct ast_key *key;
        char sum[16 * 2 + 1];
 
-       ast_pthread_mutex_lock(&keylock);
+       ast_mutex_lock(&keylock);
        key = keys;
        ast_cli(fd, "%-18s %-8s %-16s %-33s\n", "Key Name", "Type", "Status", "Sum");
        while(key) {
@@ -514,7 +520,7 @@ static int show_keys(int fd, int argc, char *argv[])
                                
                key = key->next;
        }
-       ast_pthread_mutex_unlock(&keylock);
+       ast_mutex_unlock(&keylock);
        return RESULT_SUCCESS;
 }
 
@@ -529,9 +535,9 @@ static int init_keys(int fd, int argc, char *argv[])
        while(key) {
                /* Reload keys that need pass codes now */
                if (key->ktype & KEY_NEEDS_PASSCODE) {
-                       kn = key->fn + strlen(AST_KEY_DIR) + 1;
+                       kn = key->fn + strlen(ast_config_AST_KEY_DIR) + 1;
                        strncpy(tmp, kn, sizeof(tmp));
-                       try_load_key(AST_KEY_DIR, tmp, fd, fd, &ign);
+                       try_load_key((char *)ast_config_AST_KEY_DIR, tmp, fd, fd, &ign);
                }
                key = key->next;
        }