1210284Sjmallett/*
2215990Sjmallett * Copyright (c) 1997 - 2001, 2003, 2005 - 2006 Kungliga Tekniska H��gskolan
3215990Sjmallett * (Royal Institute of Technology, Stockholm, Sweden).
4210284Sjmallett * All rights reserved.
5210284Sjmallett *
6215990Sjmallett * Redistribution and use in source and binary forms, with or without
7215990Sjmallett * modification, are permitted provided that the following conditions
8215990Sjmallett * are met:
9210284Sjmallett *
10215990Sjmallett * 1. Redistributions of source code must retain the above copyright
11215990Sjmallett *    notice, this list of conditions and the following disclaimer.
12210284Sjmallett *
13215990Sjmallett * 2. Redistributions in binary form must reproduce the above copyright
14215990Sjmallett *    notice, this list of conditions and the following disclaimer in the
15215990Sjmallett *    documentation and/or other materials provided with the distribution.
16215990Sjmallett *
17215990Sjmallett * 3. Neither the name of the Institute nor the names of its contributors
18215990Sjmallett *    may be used to endorse or promote products derived from this software
19215990Sjmallett *    without specific prior written permission.
20215990Sjmallett *
21215990Sjmallett * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
22215990Sjmallett * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23215990Sjmallett * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24215990Sjmallett * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
25215990Sjmallett * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26215990Sjmallett * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27215990Sjmallett * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28215990Sjmallett * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29215990Sjmallett * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30215990Sjmallett * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31215990Sjmallett * SUCH DAMAGE.
32215990Sjmallett */
33215990Sjmallett
34215990Sjmallett#include "kadm5_locl.h"
35215990Sjmallett
36215990SjmallettRCSID("$Id$");
37215990Sjmallett
38210284Sjmallettkadm5_ret_t
39210284Sjmallettkadm5_s_delete_principal(void *server_handle, krb5_principal princ)
40210284Sjmallett{
41210284Sjmallett    kadm5_server_context *context = server_handle;
42210284Sjmallett    kadm5_ret_t ret;
43210284Sjmallett    hdb_entry_ex ent;
44210284Sjmallett
45215990Sjmallett    memset(&ent, 0, sizeof(ent));
46210284Sjmallett    ret = context->db->hdb_open(context->context, context->db, O_RDWR, 0);
47210284Sjmallett    if(ret) {
48210284Sjmallett	krb5_warn(context->context, ret, "opening database");
49210284Sjmallett	return ret;
50210284Sjmallett    }
51210284Sjmallett    ret = context->db->hdb_fetch_kvno(context->context, context->db, princ,
52215990Sjmallett				      HDB_F_DECRYPT|HDB_F_GET_ANY|HDB_F_ADMIN_DATA, 0, &ent);
53210284Sjmallett    if(ret == HDB_ERR_NOENTRY)
54215990Sjmallett	goto out;
55215990Sjmallett    if(ent.entry.flags.immutable) {
56215990Sjmallett	ret = KADM5_PROTECT_PRINCIPAL;
57215990Sjmallett	goto out2;
58215990Sjmallett    }
59215990Sjmallett
60215990Sjmallett    ret = hdb_seal_keys(context->context, context->db, &ent.entry);
61215990Sjmallett    if (ret)
62215990Sjmallett	goto out2;
63215990Sjmallett
64215990Sjmallett    ret = context->db->hdb_remove(context->context, context->db, princ);
65215990Sjmallett    if (ret)
66215990Sjmallett	goto out2;
67215990Sjmallett
68215990Sjmallett    kadm5_log_delete (context, princ);
69215990Sjmallett
70215990Sjmallettout2:
71210284Sjmallett    hdb_free_entry(context->context, &ent);
72210284Sjmallettout:
73210284Sjmallett    context->db->hdb_close(context->context, context->db);
74210284Sjmallett    return _kadm5_error_code(ret);
75210284Sjmallett}
76215990Sjmallett