-/* $Id: zebraapi.c,v 1.117 2004-01-22 15:40:25 heikki Exp $
+/* $Id: zebraapi.c,v 1.120 2004-07-28 08:15:45 adam Exp $
Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004
Index Data Aps
zh->errCode = 0;
zh->errString = 0;
zh->res = 0;
+ zh->user_perm = 0;
zh->reg_name = xstrdup ("");
zh->path_reg = 0;
return zh;
}
-ZebraService zebra_start (const char *configName, Res def_res, Res over_res)
+ZebraService zebra_start (const char *configName)
+{
+ return zebra_start_res(configName, 0, 0);
+}
+
+ZebraService zebra_start_res (const char *configName, Res def_res, Res over_res)
{
Res res;
}
zebra_mutex_cond_unlock (&zs->session_lock);
xfree (zh->reg_name);
+ xfree (zh->user_perm);
zh->service=0; /* more likely to trigger an assert */
xfree (zh->path_reg);
xfree (zh);
return Z_DeleteStatus_systemProblemAtTarget;
switch (function)
{
- case Z_DeleteRequest_list:
+ case Z_DeleteResultSetRequest_list:
resultSetDestroy (zh, num_setnames, setnames, statuses);
break;
- case Z_DeleteRequest_all:
+ case Z_DeleteResultSetRequest_all:
resultSetDestroy (zh, -1, 0, statuses);
break;
}
int zebra_auth (ZebraHandle zh, const char *user, const char *pass)
{
+ const char *p;
+ char u[40];
ZebraService zs;
+
ASSERTZH;
- yaz_log(LOG_API,"zebra_auth u=%s p=%s",user,pass);
zh->errCode=0;
zs= zh->service;
+
+ sprintf(u, "perm.%.30s", user ? user : "anonymous");
+ p = res_get(zs->global_res, u);
+ xfree (zh->user_perm);
+ zh->user_perm = xstrdup(p ? p : "r");
+
+ /* users that don't require a password .. */
+ if (zh->user_perm && strchr(zh->user_perm, 'a'))
+ return 0;
+
if (!zs->passwd_db || !passwd_db_auth (zs->passwd_db, user, pass))
- {
- logf(LOG_APP,"AUTHOK:%s", user?user:"ANONYMOUS");
return 0;
- }
-
- logf(LOG_APP,"AUTHFAIL:%s", user?user:"ANONYMOUS");
return 1;
}
zh->errCode=0;
if (zebra_select_database(zh, database))
return 1;
- zebra_begin_trans (zh, 1);
+ if (zebra_begin_trans (zh, 1))
+ return 1;
return 0;
}
memcpy (recid_z, recid_buf, recid_len);
recid_z[recid_len] = 0;
- zebra_begin_trans(zh,1);
+ if (zebra_begin_trans(zh, 1))
+ return -1;
rinfo = dict_lookup (zh->reg->matchDict, recid_z);
if (rinfo)
}
ASSERTZHRES;
yaz_log(LOG_API,"zebra_begin_trans rw=%d",rw);
+
+ if (zh->user_perm)
+ {
+ if (rw && !strchr(zh->user_perm, 'w'))
+ {
+ zh->errCode = 223;
+ zh->errString = 0;
+ return -1;
+ }
+ }
+
assert (zh->res);
if (rw)
{
(zh->trans_no++);
if (zh->trans_w_no)
+ {
+ read_res_for_transaction(zh);
return 0;
+ }
if (zh->trans_no != 1)
{
zh->errCode = 2;
int zebra_insert_record (ZebraHandle zh,
const char *recordType,
int *sysno, const char *match, const char *fname,
- const char *buf, int buf_size)
+ const char *buf, int buf_size, int force_update)
{
int res;
yaz_log(LOG_API,"zebra_insert_record sysno=%d", *sysno);
if (buf_size < 1) buf_size = strlen(buf);
- zebra_begin_trans(zh, 1);
+ if (zebra_begin_trans(zh, 1))
+ return 1;
res = buffer_extract_record (zh, buf, buf_size,
0, /* delete_flag */
0, /* test_mode */
if (buf_size < 1) buf_size = strlen(buf);
- zebra_begin_trans(zh, 1);
+ if (zebra_begin_trans(zh, 1))
+ return 1;
res = buffer_extract_record (zh, buf, buf_size,
0, /* delete_flag */
0, /* test_mode */
match, fname,
force_update,
1); /* allow_update */
+ yaz_log(LOG_LOG, "zebra_update_record returned res=%d", res);
zebra_end_trans(zh);
return res;
}
if (buf_size < 1) buf_size = strlen(buf);
- zebra_begin_trans(zh, 1);
+ if (zebra_begin_trans(zh, 1))
+ return 1;
res = buffer_extract_record (zh, buf, buf_size,
1, /* delete_flag */
0, /* test_mode */
zebra_end_read(zh);
return sort_status;
}
+