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;