db-checkpassword.h revision 51ead2f4c04ee85615d23c453924633b9ed8a4c2
c25356d5978632df6203437e1953bcb29e0c736fTimo Sirainen#ifndef CHECKPASSWORD_COMMON_H
c25356d5978632df6203437e1953bcb29e0c736fTimo Sirainen#define CHECKPASSWORD_COMMON_H
89b548af722113acb5d63dfffb44423cb60f91e4Timo Sirainen
49e358eebea107aad9919dcc4bd88cee8519ba2eTimo Sirainen#include "auth-request.h"
49e358eebea107aad9919dcc4bd88cee8519ba2eTimo Sirainen#include "lib-signals.h"
6143fece58262865ce89b5012b73ef08f2ad6abcTimo Sirainen#include "buffer.h"
89b548af722113acb5d63dfffb44423cb60f91e4Timo Sirainen#include "str.h"
89b548af722113acb5d63dfffb44423cb60f91e4Timo Sirainen#include "ioloop.h"
89b548af722113acb5d63dfffb44423cb60f91e4Timo Sirainen#include "hash.h"
89b548af722113acb5d63dfffb44423cb60f91e4Timo Sirainen#include "env-util.h"
4f49b5cbfa6b9e6e4a213009ea6bb84337cb106aTimo Sirainen#include "safe-memset.h"
89b548af722113acb5d63dfffb44423cb60f91e4Timo Sirainen#include "child-wait.h"
4f49b5cbfa6b9e6e4a213009ea6bb84337cb106aTimo Sirainen
4f49b5cbfa6b9e6e4a213009ea6bb84337cb106aTimo Sirainen#include <stdlib.h>
6143fece58262865ce89b5012b73ef08f2ad6abcTimo Sirainen#include <unistd.h>
c32823063d8050bd4c9b300e267f3eacf34d018dTimo Sirainen#include <sys/wait.h>
9716b2665ee3938d3dfe64bda44d7c3ae3b55d30Timo Sirainen
9716b2665ee3938d3dfe64bda44d7c3ae3b55d30Timo Sirainen
9716b2665ee3938d3dfe64bda44d7c3ae3b55d30Timo Sirainenstruct chkpw_auth_request {
9716b2665ee3938d3dfe64bda44d7c3ae3b55d30Timo Sirainen int fd_out, fd_in;
89b548af722113acb5d63dfffb44423cb60f91e4Timo Sirainen struct io *io_out, *io_in;
dec85d9856c33f427a06dda01e0e50de0bc8fa7dTimo Sirainen pid_t pid;
dec85d9856c33f427a06dda01e0e50de0bc8fa7dTimo Sirainen
dec85d9856c33f427a06dda01e0e50de0bc8fa7dTimo Sirainen string_t *input_buf;
4f49b5cbfa6b9e6e4a213009ea6bb84337cb106aTimo Sirainen char *password;
4f49b5cbfa6b9e6e4a213009ea6bb84337cb106aTimo Sirainen unsigned int write_pos;
dec85d9856c33f427a06dda01e0e50de0bc8fa7dTimo Sirainen
4f49b5cbfa6b9e6e4a213009ea6bb84337cb106aTimo Sirainen struct auth_request *request;
4f49b5cbfa6b9e6e4a213009ea6bb84337cb106aTimo Sirainen void *callback;
4f49b5cbfa6b9e6e4a213009ea6bb84337cb106aTimo Sirainen void (*half_finish_callback)();
4f49b5cbfa6b9e6e4a213009ea6bb84337cb106aTimo Sirainen void (*finish_callback)();
4f49b5cbfa6b9e6e4a213009ea6bb84337cb106aTimo Sirainen int internal_failure_code;
4f49b5cbfa6b9e6e4a213009ea6bb84337cb106aTimo Sirainen
4f49b5cbfa6b9e6e4a213009ea6bb84337cb106aTimo Sirainen int exit_status;
89b548af722113acb5d63dfffb44423cb60f91e4Timo Sirainen unsigned int exited:1;
};
enum checkpassword_sigchld_handler_result {
SIGCHLD_RESULT_UNKNOWN_CHILD = -1,
SIGCHLD_RESULT_DEAD_CHILD = -2,
SIGCHLD_RESULT_UNKNOWN_ERROR = -3,
SIGCHLD_RESULT_OK = 1,
};
void checkpassword_request_free(struct chkpw_auth_request *request);
enum checkpassword_sigchld_handler_result
checkpassword_sigchld_handler(const struct child_wait_status *child_wait_status,
struct chkpw_auth_request *request);
void checkpassword_setup_env(struct auth_request *request);
void checkpassword_child_input(struct chkpw_auth_request *request);
void checkpassword_child_output(struct chkpw_auth_request *request);
#endif