The branch stable/13 has been updated by des:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=4437c6a1882570ab54acf70d7d91e82fbd2a05b7

commit 4437c6a1882570ab54acf70d7d91e82fbd2a05b7
Author:     Dag-Erling Smørgrav <[email protected]>
AuthorDate: 2023-06-13 16:06:27 +0000
Commit:     Dag-Erling Smørgrav <[email protected]>
CommitDate: 2023-12-13 16:08:13 +0000

    nss_tacplus: Support setting the login class.
    
    MFC after:      1 week
    Sponsored by:   Klara, Inc.
    Reviewed by:    thj
    Differential Revision:  https://reviews.freebsd.org/D40376
    
    (cherry picked from commit 246aec9a3ce305272f35e6416910024f602a03c1)
---
 lib/nss_tacplus/nss_tacplus.8 |  5 ++++-
 lib/nss_tacplus/nss_tacplus.c | 12 ++++++++++++
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/lib/nss_tacplus/nss_tacplus.8 b/lib/nss_tacplus/nss_tacplus.8
index 4aaff4b5dd3a..f5c87a836f9a 100644
--- a/lib/nss_tacplus/nss_tacplus.8
+++ b/lib/nss_tacplus/nss_tacplus.8
@@ -3,7 +3,7 @@
 .\"
 .\" SPDX-License-Identifier: BSD-2-Clause
 .\"
-.Dd May 17, 2023
+.Dd June 13, 2023
 .Dt NSS_TACPLUS 8
 .Os
 .Sh NAME
@@ -57,6 +57,9 @@ Numeric primary group ID.
 Must be between 0 and
 .Dv GID_MAX .
 Defaults to 65534.
+.It Va CLASS
+Login class.
+Left blank if not provided.
 .It Va GECOS
 Display name.
 If not provided, the user name is used instead.
diff --git a/lib/nss_tacplus/nss_tacplus.c b/lib/nss_tacplus/nss_tacplus.c
index a59332504bc0..e18ffe2315ce 100644
--- a/lib/nss_tacplus/nss_tacplus.c
+++ b/lib/nss_tacplus/nss_tacplus.c
@@ -24,6 +24,7 @@ extern int __isthreaded;
 
 #define        DEF_UID         65534
 #define        DEF_GID         65534
+#define        DEF_CLASS       ""
 #define        DEF_DIR         "/"
 #define        DEF_SHELL       "/bin/sh"
 
@@ -192,6 +193,13 @@ tacplus_getpwnam_r(const char *name, struct passwd *pwd, 
char *buffer,
                                return (NS_RETURN);
                        }
                        pwd->pw_gid = num;
+               } else if (strcasecmp(av, "class") == 0) {
+                       pwd->pw_class = tacplus_copystr(value, &buffer,
+                           &bufsize);
+                       if (pwd->pw_class == NULL) {
+                               free(av);
+                               return (NS_RETURN);
+                       }
                } else if (strcasecmp(av, "gecos") == 0) {
                        pwd->pw_gecos = tacplus_copystr(value, &buffer,
                            &bufsize);
@@ -217,6 +225,10 @@ tacplus_getpwnam_r(const char *name, struct passwd *pwd, 
char *buffer,
                free(av);
        }
 
+       /* default class if none was provided */
+       if (pwd->pw_class == NULL)
+               pwd->pw_class = tacplus_copystr(DEF_CLASS, &buffer, &bufsize);
+
        /* gecos equal to name if none was provided */
        if (pwd->pw_gecos == NULL)
                pwd->pw_gecos = pwd->pw_name;

Reply via email to