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);