From 0b6cf317d024ea5552b012a56bffec361bdc42d9 Mon Sep 17 00:00:00 2001 From: Markus Moeller Date: Mon, 11 Jul 2011 23:47:25 -0600 Subject: [PATCH] kerberos_lap_group: several fixes * detect SASL2 libraries on 64-bit RPM and BSD systems * parse for -S command line option properly * debug and process NULL domains better --- .../kerberos_ldap_group/config.test | 3 +++ .../kerberos_ldap_group.cc | 2 +- .../kerberos_ldap_group/support_lserver.cc | 12 ++--------- .../kerberos_ldap_group/support_resolv.cc | 21 +++++++++++-------- 4 files changed, 18 insertions(+), 20 deletions(-) diff --git a/helpers/external_acl/kerberos_ldap_group/config.test b/helpers/external_acl/kerberos_ldap_group/config.test index 62849da1bb..dcf1b93ef5 100644 --- a/helpers/external_acl/kerberos_ldap_group/config.test +++ b/helpers/external_acl/kerberos_ldap_group/config.test @@ -12,6 +12,9 @@ if [ -f /usr/include/ldap.h -o -f /usr/local/include/ldap.h ]; then if [ -f /usr/lib/libsasl.so -o -f /usr/lib/libsasl2.so ]; then exit 0 fi + if [ -f /usr/lib64/libsasl.so -o -f /usr/lib64/libsasl2.so ]; then + exit 0 + fi if [ -f /usr/local/lib/libsasl.so -o -f /usr/local/lib/libsasl2.so ]; then exit 0 fi diff --git a/helpers/external_acl/kerberos_ldap_group/kerberos_ldap_group.cc b/helpers/external_acl/kerberos_ldap_group/kerberos_ldap_group.cc index bcef9b859c..683ef4994c 100644 --- a/helpers/external_acl/kerberos_ldap_group/kerberos_ldap_group.cc +++ b/helpers/external_acl/kerberos_ldap_group/kerberos_ldap_group.cc @@ -237,7 +237,7 @@ main(int argc, char *const argv[]) init_args(&margs); - while (-1 != (opt = getopt(argc, argv, "diasg:D:N:u:U:t:T:p:l:b:m:h"))) { + while (-1 != (opt = getopt(argc, argv, "diasg:D:N:S:u:U:t:T:p:l:b:m:h"))) { switch (opt) { case 'd': debug_enabled = 1; diff --git a/helpers/external_acl/kerberos_ldap_group/support_lserver.cc b/helpers/external_acl/kerberos_ldap_group/support_lserver.cc index 6901fdd590..0c08275404 100644 --- a/helpers/external_acl/kerberos_ldap_group/support_lserver.cc +++ b/helpers/external_acl/kerberos_ldap_group/support_lserver.cc @@ -100,11 +100,7 @@ create_ls(struct main_args *margs) } lsspn = lssp; np = p; /* after : starts new group name */ - if (!lssp->domain || !strcmp(lssp->domain, "")) { - debug((char *) "%s| %s: DEBUG: No domain defined for ldap server %s\n", LogTime(), PROGRAM, lssp->lserver); - return (1); - } - debug((char *) "%s| %s: DEBUG: ldap server %s Domain %s\n", LogTime(), PROGRAM, lssp->lserver, lssp->domain); + debug((char *) "%s| %s: DEBUG: ldap server %s Domain %s\n", LogTime(), PROGRAM, lssp->lserver, lssp->domain?lssp->domain:"NULL"); } else p++; } @@ -120,11 +116,7 @@ create_ls(struct main_args *margs) if (lsspn) /* Have already an existing structure */ lssp->next = lsspn; } - if (!lssp->domain || !strcmp(lssp->domain, "")) { - debug((char *) "%s| %s: DEBUG: No domain defined for ldap server %s\n", LogTime(), PROGRAM, lssp->lserver); - return (1); - } - debug((char *) "%s| %s: DEBUG: ldap server %s Domain %s\n", LogTime(), PROGRAM, lssp->lserver, lssp->domain); + debug((char *) "%s| %s: DEBUG: ldap server %s Domain %s\n", LogTime(), PROGRAM, lssp->lserver, lssp->domain?lssp->domain:"NULL"); margs->lservs = lssp; return (0); diff --git a/helpers/external_acl/kerberos_ldap_group/support_resolv.cc b/helpers/external_acl/kerberos_ldap_group/support_resolv.cc index f5426a1850..f07d465c57 100644 --- a/helpers/external_acl/kerberos_ldap_group/support_resolv.cc +++ b/helpers/external_acl/kerberos_ldap_group/support_resolv.cc @@ -243,7 +243,7 @@ get_ldap_hostname_list(struct main_args *margs, struct hstruct **hlist, int nh, ls = margs->lservs; while (ls) { - debug((char *) "%s| %s: DEBUG: Ldap server loop: lserver@domain %s@%s\n", LogTime(), PROGRAM, ls->lserver, ls->domain); + debug((char *) "%s| %s: DEBUG: Ldap server loop: lserver@domain %s@%s\n", LogTime(), PROGRAM, ls->lserver, ls->domain?ls->domain:"NULL"); if (ls->domain && !strcasecmp(ls->domain, domain)) { debug((char *) "%s| %s: DEBUG: Found lserver@domain %s@%s\n", LogTime(), PROGRAM, ls->lserver, ls->domain); hp = (struct hstruct *) xrealloc(hp, sizeof(struct hstruct) * (nhosts + 1)); @@ -252,6 +252,15 @@ get_ldap_hostname_list(struct main_args *margs, struct hstruct **hlist, int nh, hp[nhosts].priority = -2; hp[nhosts].weight = -2; nhosts++; + } else if ( !ls->domain || !strcasecmp(ls->domain, "") ) { + debug((char *) "%s| %s: DEBUG: Found lserver@domain %s@%s\n", LogTime(), PROGRAM, ls->lserver, ls->domain?ls->domain:"NULL"); + hp = (struct hstruct *) xrealloc(hp, sizeof(struct hstruct) * (nhosts + 1)); + hp[nhosts].host = strdup(ls->lserver); + hp[nhosts].port = -1; + hp[nhosts].priority = -2; + hp[nhosts].weight = -2; + nhosts++; + } ls = ls->next; } @@ -390,6 +399,8 @@ get_ldap_hostname_list(struct main_args *margs, struct hstruct **hlist, int nh, #endif goto cleanup; } + +cleanup: nhosts = get_hostname_list(margs, &hp, nh, domain); debug("%s| %s: DEBUG: Adding %s to list\n", LogTime(), PROGRAM, domain); @@ -438,13 +449,5 @@ get_ldap_hostname_list(struct main_args *margs, struct hstruct **hlist, int nh, xfree(service); *hlist = hp; return (nhosts); - -cleanup: - if (buffer) - xfree(buffer); - if (service) - xfree(service); - *hlist = hp; - return (nhosts); } #endif -- 2.47.2