From 4bf09a2ebfabede83cdac782de52386423e01927 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Tue, 16 Jun 2009 22:57:08 +0000 Subject: [PATCH 1/1] windows-netidmgr-cell-search-registry-20090616 LICENSE MIT Forgot to update the afs provider to support registry based cellservdb lookups --- src/WINNT/netidmgr_plugin/afsfuncs.c | 23 ++++++++++++++++++----- src/WINNT/netidmgr_plugin/afsfuncs.h | 4 ---- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/WINNT/netidmgr_plugin/afsfuncs.c b/src/WINNT/netidmgr_plugin/afsfuncs.c index 51db4ce..05018c8 100644 --- a/src/WINNT/netidmgr_plugin/afsfuncs.c +++ b/src/WINNT/netidmgr_plugin/afsfuncs.c @@ -29,12 +29,18 @@ #pragma warning (push) #pragma warning (disable: 4005) +#include #include +#include #include #include #pragma warning (pop) +static char *afs_realm_of_cell(afs_conf_cell *, BOOL); +static long afs_get_cellconfig_callback(void *, struct sockaddr_in *, char *, unsigned short ipRank); +static int afs_get_cellconfig(char *, afs_conf_cell *, char *); + BOOL afs_is_running(void) { DWORD CurrentState; @@ -1382,7 +1388,8 @@ static int afs_get_cellconfig(char *cell, afs_conf_cell *cellconfig, char *local_cell) { int rc; - int ttl; + int ttl = 0; + char linkedCell[MAXCELLCHARS]=""; local_cell[0] = (char)0; memset(cellconfig, 0, sizeof(*cellconfig)); @@ -1397,16 +1404,21 @@ afs_get_cellconfig(char *cell, afs_conf_cell *cellconfig, char *local_cell) if (strlen(cell) == 0) StringCbCopyA(cell, (MAXCELLCHARS+1) * sizeof(char), local_cell); - /* WIN32: cm_SearchCellFile(cell, newcell, pcallback, pdata) */ StringCbCopyA(cellconfig->name, (MAXCELLCHARS+1) * sizeof(char), cell); - rc = cm_SearchCellFile(cell, NULL, afs_get_cellconfig_callback, - (void*)cellconfig); + rc = cm_SearchCellRegistry(1, cell, NULL, linkedCell, + afs_get_cellconfig_callback, (void*) cellconfig); + if (rc && rc != CM_ERROR_FORCE_DNS_LOOKUP) + rc = cm_SearchCellFileEx(cell, NULL, linkedCell, afs_get_cellconfig_callback, + (void*)cellconfig); if(rc) rc = cm_SearchCellByDNS(cell, NULL, &ttl, afs_get_cellconfig_callback, (void*) cellconfig); + if (linkedCell[0]) + cellconfig->linkedCell = strdup(linkedCell); + return rc; } @@ -1416,7 +1428,8 @@ afs_get_cellconfig(char *cell, afs_conf_cell *cellconfig, char *local_cell) static long afs_get_cellconfig_callback(void *cellconfig, struct sockaddr_in *addrp, - char *namep) + char *namep, + unsigned short ipRank) { afs_conf_cell *cc = (afs_conf_cell *)cellconfig; diff --git a/src/WINNT/netidmgr_plugin/afsfuncs.h b/src/WINNT/netidmgr_plugin/afsfuncs.h index f7ba42e..6add811 100644 --- a/src/WINNT/netidmgr_plugin/afsfuncs.h +++ b/src/WINNT/netidmgr_plugin/afsfuncs.h @@ -75,8 +75,4 @@ void afs_report_error(LONG rc, LPCSTR FailedFunctionName); khm_boolean afs_check_for_cell_realm_match(khm_handle identity, char * cell); - -static char *afs_realm_of_cell(afs_conf_cell *, BOOL); -static long afs_get_cellconfig_callback(void *, struct sockaddr_in *, char *); -static int afs_get_cellconfig(char *, afs_conf_cell *, char *); #endif -- 1.9.4