[1949] in Moira Commits

home help back first fref pref prev next nref lref last post

/svn/moira r4088 - trunk/moira/incremental/kerberos

daemon@ATHENA.MIT.EDU (Garry Zacheiss)
Mon Dec 3 11:45:04 2012

Date: Mon, 3 Dec 2012 11:44:57 -0500
From: Garry Zacheiss <zacheiss@MIT.EDU>
Message-Id: <201212031644.qB3Giv84017426@drugstore.mit.edu>
To: moira-commits@MIT.EDU
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Author: zacheiss
Date: 2012-12-03 11:44:57 -0500 (Mon, 03 Dec 2012)
New Revision: 4088

Modified:
   trunk/moira/incremental/kerberos/kerberos.c
Log:
Look up and apply existing principal attributes rather than blindly overwriting them.

Modified: trunk/moira/incremental/kerberos/kerberos.c
===================================================================
--- trunk/moira/incremental/kerberos/kerberos.c	2012-11-15 16:54:49 UTC (rev 4087)
+++ trunk/moira/incremental/kerberos/kerberos.c	2012-12-03 16:44:57 UTC (rev 4088)
@@ -126,7 +126,8 @@
   void *kadm_server_handle = NULL;
   krb5_context context = NULL;
   kadm5_ret_t status;
-  kadm5_principal_ent_rec princ;
+  krb5_principal princ;
+  kadm5_principal_ent_rec dprinc;
   kadm5_policy_ent_rec defpol;
   kadm5_config_params realm_params;
   char admin_princ[256];
@@ -149,8 +150,9 @@
     return status;
 
   memset(&princ, 0, sizeof(princ));
+  memset(&dprinc, 0, sizeof(dprinc));
 
-  status = krb5_parse_name(context, username, &(princ.principal));
+  status = krb5_parse_name(context, username, &princ);
   if (status)
     return status;
 
@@ -161,22 +163,27 @@
   if (status)
     goto cleanup;
 
+  status = kadm5_get_principal(kadm_server_handle, princ, &dprinc, KADM5_PRINCIPAL_NORMAL_MASK);
+  if (status)
+    goto cleanup;
+
   mask |= KADM5_ATTRIBUTES;
   if (activate)
     {
       /* Enable principal */
-      princ.attributes &= ~KRB5_KDB_DISALLOW_ALL_TIX;
+      dprinc.attributes &= ~KRB5_KDB_DISALLOW_ALL_TIX;
     }
   else
     {
       /* Disable principal */
-      princ.attributes |= KRB5_KDB_DISALLOW_ALL_TIX;
+      dprinc.attributes |= KRB5_KDB_DISALLOW_ALL_TIX;
     }
 
-  status = kadm5_modify_principal(kadm_server_handle, &princ, mask);
+  status = kadm5_modify_principal(kadm_server_handle, &dprinc, mask);
 
  cleanup:
-  krb5_free_principal(context, princ.principal);
+  krb5_free_principal(context, princ);
+  kadm5_free_principal_ent(kadm_server_handle, &dprinc);
   if (kadm_server_handle)
     kadm5_destroy(kadm_server_handle);
 


home help back first fref pref prev next nref lref last post