mirror of
https://gitlab.com/openconnect/ocserv.git
synced 2026-10-14 02:22:03 +08:00
pam uses the new sub-config format
This commit is contained in:
+3
-9
@@ -24,6 +24,7 @@
|
|||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#include <vpn.h>
|
#include <vpn.h>
|
||||||
#include "pam.h"
|
#include "pam.h"
|
||||||
|
#include "cfg.h"
|
||||||
#include <sec-mod-auth.h>
|
#include <sec-mod-auth.h>
|
||||||
|
|
||||||
#ifdef HAVE_PAM
|
#ifdef HAVE_PAM
|
||||||
@@ -341,17 +342,10 @@ struct pam_ctx_st * pctx = ctx;
|
|||||||
static void pam_group_list(void *pool, void *_additional, char ***groupname, unsigned *groupname_size)
|
static void pam_group_list(void *pool, void *_additional, char ***groupname, unsigned *groupname_size)
|
||||||
{
|
{
|
||||||
struct group *grp;
|
struct group *grp;
|
||||||
|
struct pam_cfg_st *config = _additional;
|
||||||
gid_t min = 0;
|
gid_t min = 0;
|
||||||
char *additional = _additional;
|
|
||||||
|
|
||||||
if (additional != NULL) {
|
min = config->gid_min;
|
||||||
if (strstr(additional, "gid-min=") != NULL) {
|
|
||||||
additional += 8;
|
|
||||||
min = atoi(additional);
|
|
||||||
} else {
|
|
||||||
syslog(LOG_INFO, "unknown PAM auth string '%s'", additional);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
setgrent();
|
setgrent();
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,10 @@ typedef struct radius_cfg_st {
|
|||||||
char *config;
|
char *config;
|
||||||
} radius_cfg_st;
|
} radius_cfg_st;
|
||||||
|
|
||||||
|
typedef struct pam_cfg_st {
|
||||||
|
int gid_min;
|
||||||
|
} pam_cfg_st;
|
||||||
|
|
||||||
unsigned expand_brackets_string(struct cfg_st *config, const char *str, subcfg_val_st out[MAX_SUBOPTIONS]);
|
unsigned expand_brackets_string(struct cfg_st *config, const char *str, subcfg_val_st out[MAX_SUBOPTIONS]);
|
||||||
inline static void free_expanded_brackets_string(subcfg_val_st out[MAX_SUBOPTIONS], unsigned size)
|
inline static void free_expanded_brackets_string(subcfg_val_st out[MAX_SUBOPTIONS], unsigned size)
|
||||||
{
|
{
|
||||||
@@ -52,5 +56,6 @@ inline static void free_expanded_brackets_string(subcfg_val_st out[MAX_SUBOPTION
|
|||||||
void *get_brackets_string1(struct cfg_st *config, const char *str);
|
void *get_brackets_string1(struct cfg_st *config, const char *str);
|
||||||
void *gssapi_get_brackets_string(struct cfg_st *config, const char *str);
|
void *gssapi_get_brackets_string(struct cfg_st *config, const char *str);
|
||||||
void *radius_get_brackets_string(struct cfg_st *config, const char *str);
|
void *radius_get_brackets_string(struct cfg_st *config, const char *str);
|
||||||
|
void *pam_get_brackets_string(struct cfg_st *config, const char *str);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
+1
-1
@@ -357,7 +357,7 @@ typedef struct auth_types_st {
|
|||||||
static auth_types_st avail_auth_types[] =
|
static auth_types_st avail_auth_types[] =
|
||||||
{
|
{
|
||||||
#ifdef HAVE_PAM
|
#ifdef HAVE_PAM
|
||||||
{NAME("pam"), &pam_auth_funcs, AUTH_TYPE_PAM, get_brackets_string1},
|
{NAME("pam"), &pam_auth_funcs, AUTH_TYPE_PAM, pam_get_brackets_string},
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_GSSAPI
|
#ifdef HAVE_GSSAPI
|
||||||
{NAME("gssapi"), &gssapi_auth_funcs, AUTH_TYPE_GSSAPI, gssapi_get_brackets_string},
|
{NAME("gssapi"), &gssapi_auth_funcs, AUTH_TYPE_GSSAPI, gssapi_get_brackets_string},
|
||||||
|
|||||||
+33
-2
@@ -221,9 +221,40 @@ void *radius_get_brackets_string(struct cfg_st *config, const char *str)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
free_expanded_brackets_string(vals, vals_size);
|
free_expanded_brackets_string(vals, vals_size);
|
||||||
return additional;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return additional;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PAM
|
||||||
|
void *pam_get_brackets_string(struct cfg_st *config, const char *str)
|
||||||
|
{
|
||||||
|
subcfg_val_st vals[MAX_SUBOPTIONS];
|
||||||
|
unsigned vals_size, i;
|
||||||
|
pam_cfg_st *additional;
|
||||||
|
|
||||||
|
additional = talloc_zero(config, pam_cfg_st);
|
||||||
|
if (additional == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* new format */
|
||||||
|
vals_size = expand_brackets_string(config, str, vals);
|
||||||
|
for (i=0;i<vals_size;i++) {
|
||||||
|
if (c_strcasecmp(vals[i].name, "gid-min") == 0) {
|
||||||
|
additional->gid_min = atoi(vals[i].value);
|
||||||
|
if (additional->gid_min < 0) {
|
||||||
|
fprintf(stderr, "error in gid-min value: %d\n", additional->gid_min);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "unknown option '%s'\n", vals[i].name);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
free_expanded_brackets_string(vals, vals_size);
|
||||||
return additional;
|
return additional;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user