Adjusted self label and peer label API.
authorJarkko Sakkinen <jarkko.sakkinen@iki.fi>
Thu, 10 Nov 2011 10:34:18 +0000 (12:34 +0200)
committerJarkko Sakkinen <jarkko.sakkinen@iki.fi>
Thu, 10 Nov 2011 10:38:52 +0000 (12:38 +0200)
libsmack/libsmack.c
libsmack/libsmack.h
libsmack/libsmack.sym
utils/smackself.c

index daa1ff2..940c9bb 100644 (file)
@@ -271,54 +271,56 @@ int smack_have_access(const char *subject, const char *object,
        return buf[0] == '1';
 }
 
-char *smack_get_self_label()
+int smack_new_label_from_self(char **label)
 {
-       char *label;
+       char *result;
        int fd;
        int ret;
 
-       label = calloc(LABEL_LEN + 1, 1);
-       if (label == NULL)
-               return NULL;
+       result = calloc(LABEL_LEN + 1, 1);
+       if (result == NULL)
+               return -1;
 
        fd = open(SELF_LABEL_FILE, O_RDONLY);
        if (fd < 0) {
-               free(label);
-               return NULL;
+               free(result);
+               return -1;
        }
 
-       ret = read(fd, label, LABEL_LEN);
+       ret = read(fd, result, LABEL_LEN);
        close(fd);
        if (ret < 0) {
-               free(label);
-               return NULL;
+               free(result);
+               return -1;
        }
 
-       return label;
+       *label = result;
+       return 0;
 }
 
-char *smack_get_peer_label(int fd)
+int smack_new_label_from_socket(int fd, char **label)
 {
        char dummy;
        int ret;
        socklen_t length = 1;
-       char *label;
+       char *result;
 
        ret = getsockopt(fd, SOL_SOCKET, SO_PEERSEC, &dummy, &length);
        if (ret < 0 && errno != ERANGE)
-               return NULL;
+               return -1;
 
-       label = calloc(length, 1);
-       if (label == NULL)
-               return NULL;
+       result = calloc(length, 1);
+       if (result == NULL)
+               return -1;
 
-       ret = getsockopt(fd, SOL_SOCKET, SO_PEERSEC, label, &length);
+       ret = getsockopt(fd, SOL_SOCKET, SO_PEERSEC, result, &length);
        if (ret < 0) {
-               free(label);
-               return NULL;
+               free(result);
+               return -1;
        }
 
-       return label;
+       *label = result;
+       return 0;
 }
 
 inline int access_type_to_int(const char *access_type)
index 98e0914..f01c4d1 100644 (file)
@@ -48,7 +48,7 @@ struct smack_accesses;
 /*!
  * Creates a new empty smack_accesses instance.
  *
- * @param created instance
+ * @param accesses created instance
  * @return 0 on success and negative value on failure.
  */
 int smack_accesses_new(struct smack_accesses **accesses);
@@ -58,7 +58,7 @@ int smack_accesses_new(struct smack_accesses **accesses);
  * file descriptor.
  *
  * @param fd file descriptor
- * @param created instance
+ * @param accesses created instance
  * @return 0 on success and negative value on failure.
  */
 int smack_accesses_new_from_file(int fd, struct smack_accesses **accesses);
@@ -115,18 +115,21 @@ int smack_have_access(const char *subject, const char *object,
   * Get the label that is associated with the callers process.
   * Caller is responsible of freeing the returned label.
   *
-  * @return Callers label on success and NULL of failure.
+  * @param label returned label
+  * @return 0 on success and negative value on failure.
   */
-char *smack_get_self_label();
+int smack_new_label_from_self(char **label);
 
 /*!
   * Get the label that is associated with a peer on the other end of an
-  * Unix socket. Caller is responsible of freeing the returned label.
+  * Unix socket (SO_PEERSEC). Caller is responsible of freeing the 
+  * returned label.
   *
   * @param fd socket file descriptor
-  * @return Peers label on success and NULL of failure.
+  * @param label returned label
+  * @return 0 on success and negative value on failure.
   */
-char *smack_get_peer_label(int fd);
+int smack_new_label_from_socket(int fd, char **label);
 
 #ifdef __cplusplus
 }
index e983ea6..7d0b2ef 100644 (file)
@@ -7,8 +7,8 @@ global:
        smack_accesses_apply;
        smack_accesses_add;
        smack_have_access;
-       smack_get_self_label;
-       smack_get_peer_label;
+       smack_new_label_from_self;
+       smack_new_label_from_socket;
 local:
        *;
 };
index 3b1e6e9..937b573 100644 (file)
@@ -30,9 +30,8 @@ int main(int argc, char **argv)
 {
        char *label = NULL;
 
-       label = smack_get_self_label();
-       if (label == NULL) {
-               perror("smack_get_self_label");
+       if (smack_new_label_from_self(&label)) {
+               perror("smack_new_label_from_self");
                return EXIT_FAILURE;
        }