Skip to contentSkip to conversation

Patch: select non-conventional principal in gssd

PATCH Jurjen Bokma 2 participants 4 messages Aug 6, 2014 – Aug 7, 2014

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

HiAll,

I have a patch to utils/gssd/krb5_util.c that enables kerberized NFS mounts to succeed even if the principal is not <HOSTNAME>$.

It works by reading another principal name from the [appdefaults] section of krb5.conf:

[appdefaults]

nfs = {
    ad_principal_name = 129.125.39.115$
}

Patch is attached. Would you please incorporate it in the source if you find it useful?
Sorry if I'm asking in the wrong place.

Best Regards
Jurjen

gssd/krb5_util.c renamed from gssd/krb5_util.c.orig +14 -6
@@ -801,7 +801,8 @@
 	char *k5err = NULL;
 	int tried_all = 0, tried_default = 0;
 	krb5_principal princ;
-
+	const char *notsetstr = "not set";
+	char *adhostoverride;
 
 	/* Get full target hostname */
 	retval = get_full_hostname(tgtname, targethostname,
@@ -818,11 +819,18 @@
 	}
 
 	/* Compute the active directory machine name HOST$ */
-	strcpy(myhostad, myhostname);
-	for (i = 0; myhostad[i] != 0; ++i)
-		myhostad[i] = toupper(myhostad[i]);
-	myhostad[i] = '$';
-	myhostad[i+1] = 0;
+	krb5_appdefault_string(context, "nfs", NULL, "ad_principal_name", notsetstr, &adhostoverride);
+	if (strcmp(adhostoverride, notsetstr) != 0) {
+	        printerr (0, "AD host string overridden with \"%s\" from appdefaults\n", adhostoverride);
+	        /* No overflow: Windows cannot handle strings longer than 19 chars */
+	        strcpy(myhostad, adhostoverride);
+	} else {
+	        strcpy(myhostad, myhostname);
+	        for (i = 0; myhostad[i] != 0; ++i)
+	          myhostad[i] = toupper(myhostad[i]);
+	        myhostad[i] = '$';
+	        myhostad[i+1] = 0;
+	}
 
 	retval = get_full_hostname(myhostname, myhostname, sizeof(myhostname));
 	if (retval)
#1 lore raw
Quoted 8 lines · Jurjen Bokma

HiAll,

I have a patch to utils/gssd/krb5_util.c that enables kerberized NFS mounts to succeed even if the principal is not <HOSTNAME>$.

It works by reading another principal name from the [appdefaults] section of krb5.conf:

Quoted 8 lines

[appdefaults]

nfs = {
    ad_principal_name = 129.125.39.115$
}

Patch is attached. Would you please incorporate it in the source if you find it useful?
Sorry if I'm asking in the wrong place.

A couple things....

One please inline your patche in your email, not attach them as suggested in https://www.kernel.org/doc/Documentation/SubmittingPatches
Inlining makes it easier to review...

gssd/krb5_util.c renamed from gssd/krb5_util.c.orig +3 -6
@@ -801,7 +801,8 @@
 	char *k5err = NULL;
 	int tried_all = 0, tried_default = 0;
 	krb5_principal princ;
-
+	const char *notsetstr = "not set";
+	char *adhostoverride;
 
 	/* Get full target hostname */
 	retval = get_full_hostname(tgtname, targethostname,
@@ -818,11 +819,18 @@
 	}
 
 	/* Compute the active directory machine name HOST$ */
-	strcpy(myhostad, myhostname);
-	for (i = 0; myhostad[i] != 0; ++i)
-		myhostad[i] = toupper(myhostad[i]);
-	myhostad[i] = '$';
-	myhostad[i+1] = 0;
+	krb5_appdefault_string(context, "nfs", NULL, "ad_principal_name", notsetstr, &adhostoverride);

Secondly, where does them memory for adhostoverride get freed??

steved.

+ if (strcmp(adhostoverride, notsetstr) != 0) {

+	        printerr (0, "AD host string overridden with \"%s\" from appdefaults\n", adhostoverride);
+	        /* No overflow: Windows cannot handle strings longer than 19 chars */
+	        strcpy(myhostad, adhostoverride);

+ } else {
+ strcpy(myhostad, myhostname);
+ for (i = 0; myhostad[i] != 0; ++i)
+ myhostad[i] = toupper(myhostad[i]);
+ myhostad[i] = '$';
+ myhostad[i+1] = 0;
+ }

retval = get_full_hostname(myhostname, myhostname, sizeof(myhostname)); if (retval)

#2 lore raw
Quoted 15 lines · Steve Dickson
Quoted 13 lines · Jurjen Bokma

HiAll,

I have a patch to utils/gssd/krb5_util.c that enables kerberized NFS mounts to succeed even if the principal is not <HOSTNAME>$.

It works by reading another principal name from the [appdefaults] section of krb5.conf:

[appdefaults]

nfs = {
    ad_principal_name = 129.125.39.115$
}
Quoted 8 lines
Quoted 3 lines

Patch is attached. Would you please incorporate it in the source if you find it useful?
Sorry if I'm asking in the wrong place.

A couple things....

One please inline your patche in your email, not attach them as suggested in https://www.kernel.org/doc/Documentation/SubmittingPatches
Inlining makes it easier to review...

I'm sorry. Also for not using the proper command, not choosing the proper subsystem, and a couple more mistakes.

Quoted 3 lines

<snip 1st version of patch>

(quoted diff) +1 -0
+	krb5_appdefault_string(context, "nfs", NULL, "ad_principal_name", notsetstr, &adhostoverride);

Secondly, where does them memory for adhostoverride get freed??

Thank you for reviewing. <shame>Leaking memory in just a dozen LOC.</shame> Wrong assumption on my part.
With the free(adhostoverride) added, the patch becomes:

gssd/krb5_util.c 2014-08-07 14:21:51.795949903 +0200 renamed from gssd/krb5_util.c.orig 2014-08-06 10:54:18.806414170 +0200 +3 -6
@@ -801,7 +801,8 @@ find_keytab_entry(krb5_context context,
        char *k5err = NULL;
        int tried_all = 0, tried_default = 0;
        krb5_principal princ;
-
+       const char *notsetstr = "not set";
+       char *adhostoverride;
 
        /* Get full target hostname */
        retval = get_full_hostname(tgtname, targethostname,
@@ -818,11 +819,19 @@ find_keytab_entry(krb5_context context,
        }
 
        /* Compute the active directory machine name HOST$ */
-       strcpy(myhostad, myhostname);
-       for (i = 0; myhostad[i] != 0; ++i)
-               myhostad[i] = toupper(myhostad[i]);
-       myhostad[i] = '$';
-       myhostad[i+1] = 0;
+       krb5_appdefault_string(context, "nfs", NULL,

"ad_principal_name", notsetstr, &adhostoverride);
+ if (strcmp(adhostoverride, notsetstr) != 0) {
+ printerr (0, "AD host string overridden with \"%s\" from
appdefaults\n", adhostoverride);
+ /* No overflow: Windows cannot handle strings longer
than 19 chars */
+ strcpy(myhostad, adhostoverride);
+ free(adhostoverride);
+ } else {
+ strcpy(myhostad, myhostname);
+ for (i = 0; myhostad[i] != 0; ++i)
+ myhostad[i] = toupper(myhostad[i]);
+ myhostad[i] = '$';
+ myhostad[i+1] = 0;
+ }

retval = get_full_hostname(myhostname, myhostname,
sizeof(myhostname));
if (retval)

And another one for the man page, if you like:

utils/gssd/gssd.man +0 -0
@@ -140,7 +140,23 @@
 that enables Kerberized NFS when the local system is joined
 to an Active Directory domain using Samba.
 A password for this principal must be provided in the local system's

keytab.
-.P
+If the host is joined to an AD domain, but not with a principal <HOSTNAME>$,
+then another principal name can be configured in
+.B /etc/krb5.conf
+in a
+.B appdefaults
+stanza:
+.sp
+ [appdefaults]
+.br
+ nfs = {
+.br
+ # This name should reflect a principal that has a key in the keytab
+.br
+ ad_principal_name = 192.168.3.19$
+.br
+ }
+.sp
You can specify another keytab by using the
.B -k
option if

Thanks!
Jurjen

#3 lore raw
Quoted 19 lines · Jurjen Bokma
Quoted 18 lines · Steve Dickson
Quoted 16 lines · Jurjen Bokma

HiAll,

I have a patch to utils/gssd/krb5_util.c that enables kerberized NFS mounts to succeed even if the principal is not <HOSTNAME>$.

It works by reading another principal name from the [appdefaults] section of krb5.conf:

[appdefaults]

nfs = {
    ad_principal_name = 129.125.39.115$
}

Patch is attached. Would you please incorporate it in the source if you find it useful?
Sorry if I'm asking in the wrong place.

Quoted 7 lines
Quoted 5 lines

A couple things....

One please inline your patche in your email, not attach them as suggested in https://www.kernel.org/doc/Documentation/SubmittingPatches
Inlining makes it easier to review...

I'm sorry. Also for not using the proper command, not choosing the proper subsystem, and a couple more mistakes.

Unfortunately you still don't have a proper Signed-off-by:
as described in the above documentation... So you will need to re-post the patch... but...

So lets start from the beginning....

When you commit the patch to your git tree do:
git commit -s -a # this will automatically added the Signed-off-by:

Next create the patch with:
git format-patch -1

Finally send the patch to list with

   git send-email \
       --to "Steve Dickson <[email protected]>" \
       --cc "Linux NFS Mailing list <[email protected]>" \
       *.patch 

Note: git send-email has a --dry-run that will test the sending without actually sending it... I would suggest you always do a test sending... Just to make sure things are going in the right direction! ;-)

steved.