modify_s.c revision 72445
11556Srgrimes/* 21556Srgrimes * Copyright (c) 1997-2001 Kungliga Tekniska H�gskolan 31556Srgrimes * (Royal Institute of Technology, Stockholm, Sweden). 41556Srgrimes * All rights reserved. 51556Srgrimes * 61556Srgrimes * Redistribution and use in source and binary forms, with or without 71556Srgrimes * modification, are permitted provided that the following conditions 81556Srgrimes * are met: 91556Srgrimes * 101556Srgrimes * 1. Redistributions of source code must retain the above copyright 111556Srgrimes * notice, this list of conditions and the following disclaimer. 121556Srgrimes * 131556Srgrimes * 2. Redistributions in binary form must reproduce the above copyright 141556Srgrimes * notice, this list of conditions and the following disclaimer in the 151556Srgrimes * documentation and/or other materials provided with the distribution. 161556Srgrimes * 171556Srgrimes * 3. Neither the name of the Institute nor the names of its contributors 181556Srgrimes * may be used to endorse or promote products derived from this software 191556Srgrimes * without specific prior written permission. 201556Srgrimes * 211556Srgrimes * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 221556Srgrimes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 231556Srgrimes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 241556Srgrimes * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 251556Srgrimes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 261556Srgrimes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 271556Srgrimes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 281556Srgrimes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 291556Srgrimes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 301556Srgrimes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 311556Srgrimes * SUCH DAMAGE. 32127499Sgad */ 33127499Sgad 34127499Sgad#include "kadm5_locl.h" 35127499Sgad 36127499SgadRCSID("$Id: modify_s.c,v 1.12 2001/01/30 01:24:28 assar Exp $"); 37127499Sgad 38127499Sgadstatic kadm5_ret_t 391556Srgrimesmodify_principal(void *server_handle, 401556Srgrimes kadm5_principal_ent_t princ, 411556Srgrimes u_int32_t mask, 4290143Smarkm u_int32_t forbidden_mask) 431556Srgrimes{ 441556Srgrimes kadm5_server_context *context = server_handle; 451556Srgrimes hdb_entry ent; 461556Srgrimes kadm5_ret_t ret; 4790143Smarkm if((mask & forbidden_mask)) 481556Srgrimes return KADM5_BAD_MASK; 4936049Scharnier if((mask & KADM5_POLICY) && strcmp(princ->policy, "default")) 5090143Smarkm return KADM5_UNK_POLICY; 5136049Scharnier 52110391Scharnier ent.principal = princ->principal; 5399110Sobrien ret = context->db->open(context->context, context->db, O_RDWR, 0); 5499110Sobrien if(ret) 551556Srgrimes return ret; 561556Srgrimes ret = context->db->fetch(context->context, context->db, 0, &ent); 573296Sdg if(ret) 581556Srgrimes goto out; 591556Srgrimes ret = _kadm5_setup_entry(context, &ent, mask, princ, mask, NULL, 0); 601556Srgrimes if(ret) 611556Srgrimes goto out2; 621556Srgrimes ret = _kadm5_set_modifier(context, &ent); 631556Srgrimes if(ret) 64127149Sgad goto out2; 651556Srgrimes 66127499Sgad ret = hdb_seal_keys(context->context, context->db, &ent); 671556Srgrimes if (ret) 6813514Smpp goto out2; 6973367Sache 701556Srgrimes kadm5_log_modify (context, 7190143Smarkm &ent, 72127499Sgad mask | KADM5_MOD_NAME | KADM5_MOD_TIME); 731556Srgrimes 741556Srgrimes ret = context->db->store(context->context, context->db, 751556Srgrimes HDB_F_REPLACE, &ent); 761556Srgrimesout2: 771556Srgrimes hdb_free_entry(context->context, &ent); 781556Srgrimesout: 791556Srgrimes context->db->close(context->context, context->db); 80127499Sgad return _kadm5_error_code(ret); 81127499Sgad} 8266377Sbrian 83127537Sgad 84127537Sgadkadm5_ret_t 85127537Sgadkadm5_s_modify_principal(void *server_handle, 86127537Sgad kadm5_principal_ent_t princ, 87127537Sgad u_int32_t mask) 88127537Sgad{ 89127537Sgad return modify_principal(server_handle, princ, mask, 90127537Sgad KADM5_LAST_PWD_CHANGE | KADM5_MOD_TIME 91127537Sgad | KADM5_MOD_NAME | KADM5_MKVNO 92127537Sgad | KADM5_AUX_ATTRIBUTES | KADM5_LAST_SUCCESS 93127537Sgad | KADM5_LAST_FAILED); 94127537Sgad} 95127537Sgad