Beispiel #1
0
/*
 * gracefully shut down database--must be called by ANY program that does
 * a krb5_db2_init
 */
krb5_error_code
krb5_db2_fini(krb5_context context)
{
    krb5_error_code retval = 0;
    krb5_db2_context *db_ctx;

    db_ctx = context->dal_handle->db_context;
    if (k5db2_inited(context)) {
        if (close(db_ctx->db_lf_file))
            retval = errno;
        else
            retval = 0;
    }
    if (db_ctx) {
        if (db_ctx->policy_db) {
            retval =
                osa_adb_fini_db(db_ctx->policy_db, OSA_ADB_POLICY_DB_MAGIC);
            if (retval)
                return retval;
        }

        k5db2_clear_context(db_ctx);
        free(context->dal_handle->db_context);
        context->dal_handle->db_context = NULL;
    }
    return retval;
}
Beispiel #2
0
static void
ctx_fini(krb5_db2_context *dbc)
{
    if (dbc->db_lf_file != -1)
        (void) close(dbc->db_lf_file);
    if (dbc->policy_db)
        (void) osa_adb_fini_db(dbc->policy_db, OSA_ADB_POLICY_DB_MAGIC);
    ctx_clear(dbc);
    free(dbc);
}
Beispiel #3
0
krb5_error_code
osa_adb_rename_db(char *filefrom, char *lockfrom, char *fileto, char *lockto,
                  int magic)
{
    osa_adb_db_t fromdb, todb;
    krb5_error_code ret;

    /* make sure todb exists */
    if ((ret = osa_adb_create_db(fileto, lockto, magic)) &&
            ret != EEXIST)
        return ret;

    if ((ret = osa_adb_init_db(&fromdb, filefrom, lockfrom, magic)))
        return ret;
    if ((ret = osa_adb_init_db(&todb, fileto, lockto, magic))) {
        (void) osa_adb_fini_db(fromdb, magic);
        return ret;
    }
    if ((ret = osa_adb_get_lock(fromdb, KRB5_DB_LOCKMODE_PERMANENT))) {
        (void) osa_adb_fini_db(fromdb, magic);
        (void) osa_adb_fini_db(todb, magic);
        return ret;
    }
    if ((ret = osa_adb_get_lock(todb, KRB5_DB_LOCKMODE_PERMANENT))) {
        (void) osa_adb_fini_db(fromdb, magic);
        (void) osa_adb_fini_db(todb, magic);
        return ret;
    }
    if ((rename(filefrom, fileto) < 0)) {
        (void) osa_adb_fini_db(fromdb, magic);
        (void) osa_adb_fini_db(todb, magic);
        return errno;
    }
    /*
     * Do not release the lock on fromdb because it is being renamed
     * out of existence; no one can ever use it again.
     */
    if ((ret = osa_adb_release_lock(todb))) {
        (void) osa_adb_fini_db(fromdb, magic);
        (void) osa_adb_fini_db(todb, magic);
        return ret;
    }

    (void) osa_adb_fini_db(fromdb, magic);
    (void) osa_adb_fini_db(todb, magic);
    return 0;
}