summaryrefslogtreecommitdiff
path: root/source/libads
diff options
context:
space:
mode:
authorGünther Deschner <gd@samba.org>2008-06-17 16:20:29 +0200
committerGünther Deschner <gd@samba.org>2008-06-17 19:54:09 +0200
commitcb7ace209c2051ae02647188715fa6ee324c2bf6 (patch)
treef6e2bb312b1b9f04fddaae4848e1e62a706872e5 /source/libads
parentec86852fc6ce2d88ad5835c8fcb337c68fd6f6bc (diff)
downloadsamba-cb7ace209c2051ae02647188715fa6ee324c2bf6.tar.gz
libads: add ads_get_machine_kvno() to make ads_get_kvno() a bit more generic.
Guenther
Diffstat (limited to 'source/libads')
-rw-r--r--source/libads/kerberos_keytab.c10
-rw-r--r--source/libads/ldap.c36
2 files changed, 34 insertions, 12 deletions
diff --git a/source/libads/kerberos_keytab.c b/source/libads/kerberos_keytab.c
index d0161ada011..8e6983897fa 100644
--- a/source/libads/kerberos_keytab.c
+++ b/source/libads/kerberos_keytab.c
@@ -312,9 +312,9 @@ int ads_keytab_add_entry(ADS_STRUCT *ads, const char *srvPrinc)
}
}
- kvno = (krb5_kvno) ads_get_kvno(ads, global_myname());
+ kvno = (krb5_kvno) ads_get_machine_kvno(ads, global_myname());
if (kvno == -1) { /* -1 indicates failure, everything else is OK */
- DEBUG(1,("ads_keytab_add_entry: ads_get_kvno failed to determine the system's kvno.\n"));
+ DEBUG(1,("ads_keytab_add_entry: ads_get_machine_kvno failed to determine the system's kvno.\n"));
ret = -1;
goto out;
}
@@ -380,7 +380,7 @@ int ads_keytab_flush(ADS_STRUCT *ads)
goto out;
}
- kvno = (krb5_kvno) ads_get_kvno(ads, global_myname());
+ kvno = (krb5_kvno) ads_get_machine_kvno(ads, global_myname());
if (kvno == -1) { /* -1 indicates a failure */
DEBUG(1,("ads_keytab_flush: Error determining the system's kvno.\n"));
goto out;
@@ -527,9 +527,9 @@ int ads_keytab_create_default(ADS_STRUCT *ads)
/* Now loop through the keytab and update any other existing entries... */
- kvno = (krb5_kvno) ads_get_kvno(ads, machine_name);
+ kvno = (krb5_kvno) ads_get_machine_kvno(ads, machine_name);
if (kvno == -1) {
- DEBUG(1,("ads_keytab_create_default: ads_get_kvno failed to determine the system's kvno.\n"));
+ DEBUG(1,("ads_keytab_create_default: ads_get_machine_kvno failed to determine the system's kvno.\n"));
return -1;
}
diff --git a/source/libads/ldap.c b/source/libads/ldap.c
index 01c4b442c8c..7b9e51068b7 100644
--- a/source/libads/ldap.c
+++ b/source/libads/ldap.c
@@ -1516,13 +1516,13 @@ ADS_STATUS ads_add_strlist(TALLOC_CTX *ctx, ADS_MODLIST *mods,
}
/**
- * Determines the computer account's current KVNO via an LDAP lookup
+ * Determines the an account's current KVNO via an LDAP lookup
* @param ads An initialized ADS_STRUCT
- * @param machine_name the NetBIOS name of the computer, which is used to identify the computer account.
- * @return the kvno for the computer account, or -1 in case of a failure.
+ * @param account_name the NT samaccountname.
+ * @return the kvno for the account, or -1 in case of a failure.
**/
-uint32 ads_get_kvno(ADS_STRUCT *ads, const char *machine_name)
+uint32 ads_get_kvno(ADS_STRUCT *ads, const char *account_name)
{
LDAPMessage *res = NULL;
uint32 kvno = (uint32)-1; /* -1 indicates a failure */
@@ -1531,14 +1531,14 @@ uint32 ads_get_kvno(ADS_STRUCT *ads, const char *machine_name)
char *dn_string = NULL;
ADS_STATUS ret = ADS_ERROR(LDAP_SUCCESS);
- DEBUG(5,("ads_get_kvno: Searching for host %s\n", machine_name));
- if (asprintf(&filter, "(samAccountName=%s$)", machine_name) == -1) {
+ DEBUG(5,("ads_get_kvno: Searching for account %s\n", account_name));
+ if (asprintf(&filter, "(samAccountName=%s)", account_name) == -1) {
return kvno;
}
ret = ads_search(ads, &res, filter, attrs);
SAFE_FREE(filter);
if (!ADS_ERR_OK(ret) || (ads_count_replies(ads, res) != 1)) {
- DEBUG(1,("ads_get_kvno: Computer Account For %s not found.\n", machine_name));
+ DEBUG(1,("ads_get_kvno: Account for %s not found.\n", account_name));
ads_msgfree(ads, res);
return kvno;
}
@@ -1574,6 +1574,28 @@ uint32 ads_get_kvno(ADS_STRUCT *ads, const char *machine_name)
}
/**
+ * Determines the computer account's current KVNO via an LDAP lookup
+ * @param ads An initialized ADS_STRUCT
+ * @param machine_name the NetBIOS name of the computer, which is used to identify the computer account.
+ * @return the kvno for the computer account, or -1 in case of a failure.
+ **/
+
+uint32_t ads_get_machine_kvno(ADS_STRUCT *ads, const char *machine_name)
+{
+ char *computer_account = NULL;
+ uint32_t kvno = -1;
+
+ if (asprintf(&computer_account, "%s$", machine_name) < 0) {
+ return kvno;
+ }
+
+ kvno = ads_get_kvno(ads, computer_account);
+ free(computer_account);
+
+ return kvno;
+}
+
+/**
* This clears out all registered spn's for a given hostname
* @param ads An initilaized ADS_STRUCT
* @param machine_name the NetBIOS name of the computer.