Todd C. Miller wrote:
> On Thu, 01 Sep 2016 13:27:49 -0400, "Ted Unangst" wrote:
> 
> > Ted Unangst wrote:
> > > I'm getting annoying warnings because these functions aren't const.
> > 
> > so....
> > 
> > turns out several of these functions *do* modify their parameters. which is
> > probably chaos, because i think we sometimes call them with const 
> > parameters.
> 
> I think you'll have to constify login_cap(3) first since the auth
> functions call into login_cap(3).

right, let's start at the beginning.

these functions have the annoying property of unconsting their arguments,
requring the caller to wriggle through hoops. thoughts on changing the
interface to strdup the default argument? but then there's the error string,
which is returned if strdup fails... rugrgrugurgr.



Index: include/login_cap.h
===================================================================
RCS file: /cvs/src/include/login_cap.h,v
retrieving revision 1.15
diff -u -p -r1.15 login_cap.h
--- include/login_cap.h 21 Nov 2014 05:13:44 -0000      1.15
+++ include/login_cap.h 2 Sep 2016 13:46:57 -0000
@@ -91,14 +91,14 @@ typedef struct login_cap {
 __BEGIN_DECLS
 struct passwd;
 
-login_cap_t *login_getclass(char *);
+login_cap_t *login_getclass(const char *);
 void    login_close(login_cap_t *);
-int     login_getcapbool(login_cap_t *, char *, unsigned int);
-quad_t  login_getcapnum(login_cap_t *, char *, quad_t, quad_t);
-quad_t  login_getcapsize(login_cap_t *, char *, quad_t, quad_t);
-char   *login_getcapstr(login_cap_t *, char *, char *, char *);
-quad_t  login_getcaptime(login_cap_t *, char *, quad_t, quad_t);
-char   *login_getstyle(login_cap_t *, char *, char *);
+int     login_getcapbool(login_cap_t *, const char *, unsigned int);
+quad_t  login_getcapnum(login_cap_t *, const char *, quad_t, quad_t);
+quad_t  login_getcapsize(login_cap_t *, const char *, quad_t, quad_t);
+char   *login_getcapstr(login_cap_t *, const char *, const char *, const char 
*);
+quad_t  login_getcaptime(login_cap_t *, const char *, quad_t, quad_t);
+char   *login_getstyle(login_cap_t *, const char *, const char *);
 
 int    secure_path(char *);
 int    setclasscontext(char *, unsigned int);
Index: lib/libc/gen/login_cap.c
===================================================================
RCS file: /cvs/src/lib/libc/gen/login_cap.c,v
retrieving revision 1.34
diff -u -p -r1.34 login_cap.c
--- lib/libc/gen/login_cap.c    10 Mar 2016 18:30:53 -0000      1.34
+++ lib/libc/gen/login_cap.c    2 Sep 2016 13:51:16 -0000
@@ -78,7 +78,7 @@ static        u_quad_t strtosize(char *, char *
 static int gsetrl(login_cap_t *, int, char *, int);
 
 login_cap_t *
-login_getclass(char *class)
+login_getclass(const char *class)
 {
        char *classfiles[2] = {NULL, NULL};
        login_cap_t *lc;
@@ -149,7 +149,7 @@ login_getclass(char *class)
 DEF_WEAK(login_getclass);
 
 char *
-login_getstyle(login_cap_t *lc, char *style, char *atype)
+login_getstyle(login_cap_t *lc, const char *style, const char *atype)
 {
        char **authtypes = _authtypes;
        char *auths, *ta;
@@ -210,19 +210,19 @@ login_getstyle(login_cap_t *lc, char *st
 DEF_WEAK(login_getstyle);
 
 char *
-login_getcapstr(login_cap_t *lc, char *cap, char *def, char *e)
+login_getcapstr(login_cap_t *lc, const char *cap, const char *def, const char 
*e)
 {
-       char *res = NULL, *str = e;
+       char *res = NULL, *str = (char *)e;
        int stat;
 
        errno = 0;
 
        if (!lc->lc_cap)
-               return (def);
+               return ((char *)def);
 
        switch (stat = cgetstr(lc->lc_cap, cap, &res)) {
        case -1:
-               str = def;
+               str = (char *)def;
                break;
        case -2:
                syslog(LOG_ERR, "%s: getting capability %s: %m",
@@ -245,7 +245,7 @@ login_getcapstr(login_cap_t *lc, char *c
 DEF_WEAK(login_getcapstr);
 
 quad_t
-login_getcaptime(login_cap_t *lc, char *cap, quad_t def, quad_t e)
+login_getcaptime(login_cap_t *lc, const char *cap, quad_t def, quad_t e)
 {
        char *ep;
        char *res = NULL, *sres;
@@ -330,7 +330,7 @@ invalid:
 DEF_WEAK(login_getcaptime);
 
 quad_t
-login_getcapnum(login_cap_t *lc, char *cap, quad_t def, quad_t e)
+login_getcapnum(login_cap_t *lc, const char *cap, quad_t def, quad_t e)
 {
        char *ep;
        char *res = NULL;
@@ -384,7 +384,7 @@ login_getcapnum(login_cap_t *lc, char *c
 DEF_WEAK(login_getcapnum);
 
 quad_t
-login_getcapsize(login_cap_t *lc, char *cap, quad_t def, quad_t e)
+login_getcapsize(login_cap_t *lc, const char *cap, quad_t def, quad_t e)
 {
        char *ep;
        char *res = NULL;
@@ -432,7 +432,7 @@ login_getcapsize(login_cap_t *lc, char *
 DEF_WEAK(login_getcapsize);
 
 int
-login_getcapbool(login_cap_t *lc, char *cap, u_int def)
+login_getcapbool(login_cap_t *lc, const char *cap, u_int def)
 {
        if (!lc->lc_cap)
                return (def);

Reply via email to