kadm_get_princs
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@3859 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -43,17 +43,18 @@ RCSID("$Id$");
|
|||||||
kadm5_ret_t
|
kadm5_ret_t
|
||||||
kadmind_dispatch(void *kadm_handle, krb5_storage *sp)
|
kadmind_dispatch(void *kadm_handle, krb5_storage *sp)
|
||||||
{
|
{
|
||||||
int32_t cmd;
|
|
||||||
kadm5_ret_t ret;
|
kadm5_ret_t ret;
|
||||||
|
int32_t cmd, mask, tmp;
|
||||||
kadm5_server_context *context = kadm_handle;
|
kadm5_server_context *context = kadm_handle;
|
||||||
char client[128], name[128], name2[128];
|
char client[128], name[128], name2[128];
|
||||||
char *op = "";
|
char *op = "";
|
||||||
krb5_principal princ, princ2;
|
krb5_principal princ, princ2;
|
||||||
kadm5_principal_ent_rec ent;
|
kadm5_principal_ent_rec ent;
|
||||||
int32_t mask;
|
char *password, *exp;
|
||||||
char *password;
|
|
||||||
krb5_keyblock *new_keys;
|
krb5_keyblock *new_keys;
|
||||||
int n_keys;
|
int n_keys;
|
||||||
|
char **princs;
|
||||||
|
int n_princs;
|
||||||
|
|
||||||
krb5_unparse_name_fixed(context->context, context->caller,
|
krb5_unparse_name_fixed(context->context, context->caller,
|
||||||
client, sizeof(client));
|
client, sizeof(client));
|
||||||
@@ -250,6 +251,36 @@ kadmind_dispatch(void *kadm_handle, krb5_storage *sp)
|
|||||||
krb5_store_int32(sp, mask);
|
krb5_store_int32(sp, mask);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case kadm_get_princs:{
|
||||||
|
op = "LIST";
|
||||||
|
ret = krb5_ret_int32(sp, &tmp);
|
||||||
|
if(ret)
|
||||||
|
goto fail;
|
||||||
|
if(tmp){
|
||||||
|
ret = krb5_ret_string(sp, &exp);
|
||||||
|
if(ret)
|
||||||
|
goto fail;
|
||||||
|
}else
|
||||||
|
exp = NULL;
|
||||||
|
krb5_warnx(context->context, "%s: %s %s", client, op, exp ? exp : "*");
|
||||||
|
ret = _kadm5_acl_check_permission(context, KADM5_PRIV_LIST);
|
||||||
|
if(ret){
|
||||||
|
free(exp);
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
ret = kadm5_get_principals(kadm_handle, exp, &princs, &n_princs);
|
||||||
|
free(exp);
|
||||||
|
sp->seek(sp, 0, SEEK_SET);
|
||||||
|
krb5_store_int32(sp, ret);
|
||||||
|
if(ret == 0){
|
||||||
|
int i;
|
||||||
|
krb5_store_int32(sp, n_princs);
|
||||||
|
for(i = 0; i < n_princs; i++)
|
||||||
|
krb5_store_string(sp, princs[i]);
|
||||||
|
kadm5_free_name_list(kadm_handle, princs, &n_princs);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
krb5_warnx(context->context, "%s: UNKNOWN OP %d", client, cmd);
|
krb5_warnx(context->context, "%s: UNKNOWN OP %d", client, cmd);
|
||||||
sp->seek(sp, 0, SEEK_SET);
|
sp->seek(sp, 0, SEEK_SET);
|
||||||
|
@@ -55,6 +55,9 @@
|
|||||||
#ifdef HAVE_FCNTL_H
|
#ifdef HAVE_FCNTL_H
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_FNMATCH_H
|
||||||
|
#include <fnmatch.h>
|
||||||
|
#endif
|
||||||
#include "admin.h"
|
#include "admin.h"
|
||||||
#include "kadm5_err.h"
|
#include "kadm5_err.h"
|
||||||
#include <hdb.h>
|
#include <hdb.h>
|
||||||
@@ -89,7 +92,8 @@ enum kadm_ops {
|
|||||||
kadm_chpass,
|
kadm_chpass,
|
||||||
kadm_modify,
|
kadm_modify,
|
||||||
kadm_randkey,
|
kadm_randkey,
|
||||||
kadm_get_privs
|
kadm_get_privs,
|
||||||
|
kadm_get_princs
|
||||||
};
|
};
|
||||||
|
|
||||||
#define KADMIN_APPL_VERSION "KADM0.0"
|
#define KADMIN_APPL_VERSION "KADM0.0"
|
||||||
@@ -121,6 +125,12 @@ _kadm5_client_send __P((
|
|||||||
kadm5_ret_t
|
kadm5_ret_t
|
||||||
_kadm5_error_code __P((kadm5_ret_t code));
|
_kadm5_error_code __P((kadm5_ret_t code));
|
||||||
|
|
||||||
|
kadm5_ret_t
|
||||||
|
_kadm5_privs_to_string __P((
|
||||||
|
u_int32_t privs,
|
||||||
|
char *string,
|
||||||
|
size_t len));
|
||||||
|
|
||||||
kadm5_ret_t
|
kadm5_ret_t
|
||||||
_kadm5_s_init_context __P((
|
_kadm5_s_init_context __P((
|
||||||
kadm5_server_context **ctx,
|
kadm5_server_context **ctx,
|
||||||
@@ -150,10 +160,4 @@ _kadm5_string_to_privs __P((
|
|||||||
const char *s,
|
const char *s,
|
||||||
u_int32_t* privs));
|
u_int32_t* privs));
|
||||||
|
|
||||||
kadm5_ret_t
|
|
||||||
_kadm5_privs_to_string __P((
|
|
||||||
u_int32_t privs,
|
|
||||||
char *string,
|
|
||||||
size_t len));
|
|
||||||
|
|
||||||
#endif /* __KADM5_LOCL_H__ */
|
#endif /* __KADM5_LOCL_H__ */
|
||||||
|
@@ -43,17 +43,18 @@ RCSID("$Id$");
|
|||||||
kadm5_ret_t
|
kadm5_ret_t
|
||||||
kadmind_dispatch(void *kadm_handle, krb5_storage *sp)
|
kadmind_dispatch(void *kadm_handle, krb5_storage *sp)
|
||||||
{
|
{
|
||||||
int32_t cmd;
|
|
||||||
kadm5_ret_t ret;
|
kadm5_ret_t ret;
|
||||||
|
int32_t cmd, mask, tmp;
|
||||||
kadm5_server_context *context = kadm_handle;
|
kadm5_server_context *context = kadm_handle;
|
||||||
char client[128], name[128], name2[128];
|
char client[128], name[128], name2[128];
|
||||||
char *op = "";
|
char *op = "";
|
||||||
krb5_principal princ, princ2;
|
krb5_principal princ, princ2;
|
||||||
kadm5_principal_ent_rec ent;
|
kadm5_principal_ent_rec ent;
|
||||||
int32_t mask;
|
char *password, *exp;
|
||||||
char *password;
|
|
||||||
krb5_keyblock *new_keys;
|
krb5_keyblock *new_keys;
|
||||||
int n_keys;
|
int n_keys;
|
||||||
|
char **princs;
|
||||||
|
int n_princs;
|
||||||
|
|
||||||
krb5_unparse_name_fixed(context->context, context->caller,
|
krb5_unparse_name_fixed(context->context, context->caller,
|
||||||
client, sizeof(client));
|
client, sizeof(client));
|
||||||
@@ -250,6 +251,36 @@ kadmind_dispatch(void *kadm_handle, krb5_storage *sp)
|
|||||||
krb5_store_int32(sp, mask);
|
krb5_store_int32(sp, mask);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case kadm_get_princs:{
|
||||||
|
op = "LIST";
|
||||||
|
ret = krb5_ret_int32(sp, &tmp);
|
||||||
|
if(ret)
|
||||||
|
goto fail;
|
||||||
|
if(tmp){
|
||||||
|
ret = krb5_ret_string(sp, &exp);
|
||||||
|
if(ret)
|
||||||
|
goto fail;
|
||||||
|
}else
|
||||||
|
exp = NULL;
|
||||||
|
krb5_warnx(context->context, "%s: %s %s", client, op, exp ? exp : "*");
|
||||||
|
ret = _kadm5_acl_check_permission(context, KADM5_PRIV_LIST);
|
||||||
|
if(ret){
|
||||||
|
free(exp);
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
ret = kadm5_get_principals(kadm_handle, exp, &princs, &n_princs);
|
||||||
|
free(exp);
|
||||||
|
sp->seek(sp, 0, SEEK_SET);
|
||||||
|
krb5_store_int32(sp, ret);
|
||||||
|
if(ret == 0){
|
||||||
|
int i;
|
||||||
|
krb5_store_int32(sp, n_princs);
|
||||||
|
for(i = 0; i < n_princs; i++)
|
||||||
|
krb5_store_string(sp, princs[i]);
|
||||||
|
kadm5_free_name_list(kadm_handle, princs, &n_princs);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
krb5_warnx(context->context, "%s: UNKNOWN OP %d", client, cmd);
|
krb5_warnx(context->context, "%s: UNKNOWN OP %d", client, cmd);
|
||||||
sp->seek(sp, 0, SEEK_SET);
|
sp->seek(sp, 0, SEEK_SET);
|
||||||
|
Reference in New Issue
Block a user