|
|
@ -381,47 +381,27 @@ static int WUNRES
|
|
|
|
privsep_server_update_atime(opts_t *opts, const dbkeys_t *keys)
|
|
|
|
privsep_server_update_atime(opts_t *opts, const dbkeys_t *keys)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
log_dbg_printf("privsep_server_update_atime: ENTER\n");
|
|
|
|
log_dbg_printf("privsep_server_update_atime: ENTER\n");
|
|
|
|
// struct sqlite3_stmt *opts->update_user_atime_sql_stmt;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// sqlite3 *userdb;
|
|
|
|
|
|
|
|
// if (sqlite3_open("/var/db/duaf.db", &userdb)) {
|
|
|
|
|
|
|
|
// fprintf(stderr, "Error opening user db file: %s\n", sqlite3_errmsg(userdb));
|
|
|
|
|
|
|
|
// sqlite3_close(userdb);
|
|
|
|
|
|
|
|
// exit(EXIT_FAILURE);
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// int rc = sqlite3_prepare_v2(opts->userdb, "UPDATE ip2user SET atime = ?1 WHERE ip = ?2 AND user = ?3", 100, &update_user_atime_sql_stmt, NULL);
|
|
|
|
|
|
|
|
// if (rc) {
|
|
|
|
|
|
|
|
// log_err_level_printf(LOG_CRIT, "Error preparing update_user_atime_sql_stmt: %s\n", sqlite3_errmsg(opts->userdb));
|
|
|
|
|
|
|
|
// sqlite3_close(opts->userdb);
|
|
|
|
|
|
|
|
// return -1;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
time_t atime = time(NULL);
|
|
|
|
time_t atime = time(NULL);
|
|
|
|
sqlite3_reset(opts->update_user_atime_sql_stmt);
|
|
|
|
sqlite3_reset(opts->update_user_atime_sql_stmt);
|
|
|
|
sqlite3_bind_int(opts->update_user_atime_sql_stmt, 1, atime);
|
|
|
|
sqlite3_bind_int(opts->update_user_atime_sql_stmt, 1, atime);
|
|
|
|
sqlite3_bind_text(opts->update_user_atime_sql_stmt, 2, keys->ip, -1, NULL);
|
|
|
|
sqlite3_bind_text(opts->update_user_atime_sql_stmt, 2, keys->ip, -1, NULL);
|
|
|
|
// sqlite3_bind_text(update_user_atime_sql_stmt, 2, "192.168.16.2", -1, NULL);
|
|
|
|
|
|
|
|
sqlite3_bind_text(opts->update_user_atime_sql_stmt, 3, keys->user, -1, NULL);
|
|
|
|
sqlite3_bind_text(opts->update_user_atime_sql_stmt, 3, keys->user, -1, NULL);
|
|
|
|
// sqlite3_bind_text(update_user_atime_sql_stmt, 3, "soner", -1, NULL);
|
|
|
|
|
|
|
|
// int count = 0;
|
|
|
|
int count = 0;
|
|
|
|
// while (count++ < 50) {
|
|
|
|
int rc;
|
|
|
|
if (sqlite3_step(opts->update_user_atime_sql_stmt) == SQLITE_DONE) {
|
|
|
|
do {
|
|
|
|
//#ifdef DEBUG_PROXY
|
|
|
|
rc = sqlite3_step(opts->update_user_atime_sql_stmt);
|
|
|
|
// log_dbg_level_printf(LOG_DBG_MODE_FINEST, "privsep_server_update_atime: Updated atime of user %s=%lld\n", keys->user, atime);
|
|
|
|
usleep(100);
|
|
|
|
log_err_level_printf(LOG_CRIT, "privsep_server_update_atime: Updated atime of user %s=%lld\n", "soner", atime);
|
|
|
|
// Retry in case we cannot acquire db file or database: SQLITE_BUSY or SQLITE_LOCKED respectively
|
|
|
|
//#endif /* DEBUG_PROXY */
|
|
|
|
} while ((rc == SQLITE_BUSY || rc == SQLITE_LOCKED) && count++ < 5);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (rc == SQLITE_DONE) {
|
|
|
|
|
|
|
|
log_err_level_printf(LOG_CRIT, "privsep_server_update_atime: Updated atime of user %s=%lld\n", "soner", (long long)atime);
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
log_err_level_printf(LOG_CRIT, "privsep_server_update_atime: Error updating user atime: %s\n", sqlite3_errmsg(opts->userdb));
|
|
|
|
log_err_level_printf(LOG_CRIT, "privsep_server_update_atime: Error updating user atime: %s\n", sqlite3_errmsg(opts->userdb));
|
|
|
|
//#ifdef DEBUG_PROXY
|
|
|
|
|
|
|
|
// log_dbg_level_printf(LOG_DBG_MODE_FINEST, "privsep_server_update_atime: Error updating user atime: %s\n", sqlite3_errmsg(opts->userdb));
|
|
|
|
|
|
|
|
//#endif /* DEBUG_PROXY */
|
|
|
|
|
|
|
|
// sqlite3_close(userdb);
|
|
|
|
|
|
|
|
// return -1;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
sqlite3_reset(opts->update_user_atime_sql_stmt);
|
|
|
|
sqlite3_reset(opts->update_user_atime_sql_stmt);
|
|
|
|
// usleep(100);
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// sqlite3_close(opts->userdb);
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -609,7 +589,6 @@ privsep_server_handle_req(opts_t *opts, int srvsock)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
case PRIVSEP_REQ_UPDATE_ATIME: {
|
|
|
|
case PRIVSEP_REQ_UPDATE_ATIME: {
|
|
|
|
dbkeys_t *arg;
|
|
|
|
dbkeys_t *arg;
|
|
|
|
// int s;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
log_dbg_printf("ENTER PRIVSEP_REQ_UPDATE_ATIME\n");
|
|
|
|
log_dbg_printf("ENTER PRIVSEP_REQ_UPDATE_ATIME\n");
|
|
|
|
if (n != sizeof(char) + sizeof(dbkeys_t)) {
|
|
|
|
if (n != sizeof(char) + sizeof(dbkeys_t)) {
|
|
|
@ -641,7 +620,6 @@ privsep_server_handle_req(opts_t *opts, int srvsock)
|
|
|
|
memcpy(arg, req + 1, n - 1);
|
|
|
|
memcpy(arg, req + 1, n - 1);
|
|
|
|
|
|
|
|
|
|
|
|
log_dbg_printf("Calling privsep_server_update_atime\n");
|
|
|
|
log_dbg_printf("Calling privsep_server_update_atime\n");
|
|
|
|
// arg = *(dbkeys_t**)(&req[1]);
|
|
|
|
|
|
|
|
if (privsep_server_update_atime(opts, arg) == -1) {
|
|
|
|
if (privsep_server_update_atime(opts, arg) == -1) {
|
|
|
|
free(arg);
|
|
|
|
free(arg);
|
|
|
|
ans[0] = PRIVSEP_ANS_SYS_ERR;
|
|
|
|
ans[0] = PRIVSEP_ANS_SYS_ERR;
|
|
|
@ -657,12 +635,10 @@ privsep_server_handle_req(opts_t *opts, int srvsock)
|
|
|
|
free(arg);
|
|
|
|
free(arg);
|
|
|
|
ans[0] = PRIVSEP_ANS_SUCCESS;
|
|
|
|
ans[0] = PRIVSEP_ANS_SUCCESS;
|
|
|
|
if (sys_sendmsgfd(srvsock, ans, 1, 0) == -1) {
|
|
|
|
if (sys_sendmsgfd(srvsock, ans, 1, 0) == -1) {
|
|
|
|
// evutil_closesocket(s);
|
|
|
|
|
|
|
|
log_err_level_printf(LOG_CRIT, "Sending message failed child 2: %s (%i"
|
|
|
|
log_err_level_printf(LOG_CRIT, "Sending message failed child 2: %s (%i"
|
|
|
|
")\n", strerror(errno), errno);
|
|
|
|
")\n", strerror(errno), errno);
|
|
|
|
return -1;
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// evutil_closesocket(s);
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/* not reached */
|
|
|
|
/* not reached */
|
|
|
@ -1115,13 +1091,10 @@ privsep_client_update_atime(int clisock, const dbkeys_t *dbkeys)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
char ans[PRIVSEP_MAX_ANS_SIZE];
|
|
|
|
char ans[PRIVSEP_MAX_ANS_SIZE];
|
|
|
|
char req[1 + sizeof(dbkeys_t)];
|
|
|
|
char req[1 + sizeof(dbkeys_t)];
|
|
|
|
// char req[1 + sizeof(dbkeys)];
|
|
|
|
|
|
|
|
int rv = -1;
|
|
|
|
int rv = -1;
|
|
|
|
ssize_t n;
|
|
|
|
ssize_t n;
|
|
|
|
|
|
|
|
|
|
|
|
req[0] = PRIVSEP_REQ_UPDATE_ATIME;
|
|
|
|
req[0] = PRIVSEP_REQ_UPDATE_ATIME;
|
|
|
|
// *((const dbkeys_t **)&req[1]) = dbkeys;
|
|
|
|
|
|
|
|
// *((const dbkeys_t **)&req[1]) = memcpy(&req[1], dbkeys, sizeof(dbkeys_t));
|
|
|
|
|
|
|
|
memcpy(req + 1, dbkeys, sizeof(req) - 1);
|
|
|
|
memcpy(req + 1, dbkeys, sizeof(req) - 1);
|
|
|
|
|
|
|
|
|
|
|
|
if (sys_sendmsgfd(clisock, req, sizeof(req), -1) == -1) {
|
|
|
|
if (sys_sendmsgfd(clisock, req, sizeof(req), -1) == -1) {
|
|
|
|