File netatalk-afpd-daemon-type-confusion.patch of Package netatalk.30708

Index: netatalk-3.1.0/etc/afpd/spotlight.c
===================================================================
--- netatalk-3.1.0.orig/etc/afpd/spotlight.c
+++ netatalk-3.1.0/etc/afpd/spotlight.c
@@ -286,7 +286,7 @@ static int sl_rpc_openQuery(AFPObj *obj,
     slq->slq_vol = v;
 
     /* convert spotlight query charset to host charset */
-    EC_NULL_LOG( sl_query = dalloc_value_for_key(query, "DALLOC_CTX", 0, "DALLOC_CTX", 1, "kMDQueryString") );
+    EC_NULL_LOG( sl_query = dalloc_value_for_key(query, "DALLOC_CTX", 0, "DALLOC_CTX", 1, "kMDQueryString", "char *") );
     char slq_host[MAXPATHLEN + 1];
     uint16_t convflags = v->v_mtou_flags;
     size_t slq_maclen;
@@ -302,9 +302,9 @@ static int sl_rpc_openQuery(AFPObj *obj,
     slq->slq_ctx1 = *uint64;
     EC_NULL_LOG( uint64 = dalloc_get(query, "DALLOC_CTX", 0, "DALLOC_CTX", 0, "uint64_t", 2) );
     slq->slq_ctx2 = *uint64;
-    EC_NULL_LOG( reqinfo = dalloc_value_for_key(query, "DALLOC_CTX", 0, "DALLOC_CTX", 1, "kMDAttributeArray") );
+    EC_NULL_LOG( reqinfo = dalloc_value_for_key(query, "DALLOC_CTX", 0, "DALLOC_CTX", 1, "kMDAttributeArray", "sl_array_t") );
     slq->slq_reqinfo = talloc_steal(slq, reqinfo);
-    if ((cnids = dalloc_value_for_key(query, "DALLOC_CTX", 0, "DALLOC_CTX", 1, "kMDQueryItemArray"))) {
+    if ((cnids = dalloc_value_for_key(query, "DALLOC_CTX", 0, "DALLOC_CTX", 1, "kMDQueryItemArray", "sl_array_t"))) {
         EC_ZERO_LOG( sl_createCNIDArray(slq, cnids->ca_cnids) );
     }
         
@@ -391,7 +391,7 @@ static int sl_rpc_storeAttributesForOIDA
         EC_NEG1_LOG( movecwd(vol, dir) );
     }
 
-    if ((sl_time = dalloc_value_for_key(query, "DALLOC_CTX", 0, "DALLOC_CTX", 1, "DALLOC_CTX", 1, "kMDItemLastUsedDate"))) {
+    if ((sl_time = dalloc_value_for_key(query, "DALLOC_CTX", 0, "DALLOC_CTX", 1, "DALLOC_CTX", 1, "kMDItemLastUsedDate", "sl_time_t"))) {
         struct utimbuf utimes;
         utimes.actime = utimes.modtime = sl_time->tv_sec;
         utime(path, &utimes);
Index: netatalk-3.1.0/libatalk/talloc/dalloc.c
===================================================================
--- netatalk-3.1.0.orig/libatalk/talloc/dalloc.c
+++ netatalk-3.1.0/libatalk/talloc/dalloc.c
@@ -211,7 +211,7 @@ void *dalloc_value_for_key(const DALLOC_
     EC_INIT;
     void *p = NULL;
     va_list args;
-    const char *type;
+    const char *type = NULL;
     int elem;
     const char *elemtype;
     char *s;
@@ -237,9 +237,17 @@ void *dalloc_value_for_key(const DALLOC_
             break;
         }            
     }
-    va_end(args);
+    if (p == NULL) {
+         EC_FAIL;
+    }
+
+    type = va_arg(args, const char *);
+    if (STRCMP(talloc_get_name(p), !=, type)) {
+         p = NULL;
+    }
 
 EC_CLEANUP:
+    va_end(args);
     if (ret != 0)
         p = NULL;
     return p;
openSUSE Build Service is sponsored by