2 * Prototypes for lib directory of Bacula
7 Copyright (C) 2000-2006 Kern Sibbald
9 This program is free software; you can redistribute it and/or
10 modify it under the terms of the GNU General Public License
11 version 2 as amended with additional clauses defined in the
12 file LICENSE in the main source directory.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 the file LICENSE for additional details.
25 void free_attr(ATTR *attr);
26 int unpack_attributes_record(JCR *jcr, int32_t stream, char *rec, ATTR *attr);
27 void build_attr_output_fnames(JCR *jcr, ATTR *attr);
28 void print_ls_output(JCR *jcr, ATTR *attr);
31 void base64_init (void);
32 int to_base64 (intmax_t value, char *where);
33 int from_base64 (intmax_t *value, char *where);
34 int bin_to_base64 (char *buf, char *bin, int len);
37 char *bstrncpy (char *dest, const char *src, int maxlen);
38 char *bstrncpy (char *dest, POOL_MEM &src, int maxlen);
39 char *bstrncat (char *dest, const char *src, int maxlen);
40 char *bstrncat (char *dest, POOL_MEM &src, int maxlen);
41 bool bstrcmp (const char *s1, const char *s2);
42 int cstrlen (const char *str);
43 void *b_malloc (const char *file, int line, size_t size);
45 void *bmalloc (size_t size);
47 void *brealloc (void *buf, size_t size);
48 void *bcalloc (size_t size1, size_t size2);
49 int bsnprintf (char *str, int32_t size, const char *format, ...);
50 int bvsnprintf (char *str, int32_t size, const char *format, va_list ap);
51 int pool_sprintf (char *pool_buf, const char *fmt, ...);
52 void create_pid_file (char *dir, const char *progname, int port);
53 int delete_pid_file (char *dir, const char *progname, int port);
54 void drop (char *uid, char *gid);
55 int bmicrosleep (time_t sec, long usec);
56 char *bfgets (char *s, int size, FILE *fd);
57 void make_unique_filename (POOLMEM **name, int Id, char *what);
59 long long int strtoll (const char *ptr, char **endptr, int base);
61 void read_state_file(char *dir, const char *progname, int port);
62 int bstrerror(int errnum, char *buf, size_t bufsiz);
65 int32_t bnet_recv (BSOCK *bsock);
66 bool bnet_send (BSOCK *bsock);
67 bool bnet_fsend (BSOCK *bs, const char *fmt, ...);
68 bool bnet_set_buffer_size (BSOCK *bs, uint32_t size, int rw);
69 bool bnet_sig (BSOCK *bs, int sig);
70 int bnet_tls_server (TLS_CONTEXT *ctx, BSOCK *bsock,
72 int bnet_tls_client (TLS_CONTEXT *ctx, BSOCK *bsock);
73 BSOCK * bnet_connect (JCR *jcr, int retry_interval,
74 int max_retry_time, const char *name, char *host, char *service,
75 int port, int verbose);
76 void bnet_close (BSOCK *bsock);
77 BSOCK * init_bsock (JCR *jcr, int sockfd, const char *who, const char *ip,
78 int port, struct sockaddr *client_addr);
84 int bnet_get_peer (BSOCK *bs, char *buf, socklen_t buflen);
85 BSOCK * dup_bsock (BSOCK *bsock);
86 void term_bsock (BSOCK *bsock);
87 const char *bnet_strerror (BSOCK *bsock);
88 const char *bnet_sig_to_ascii (BSOCK *bsock);
89 int bnet_wait_data (BSOCK *bsock, int sec);
90 int bnet_wait_data_intr (BSOCK *bsock, int sec);
91 int bnet_despool_to_bsock (BSOCK *bsock, void update(ssize_t size), ssize_t size);
92 bool is_bnet_stop (BSOCK *bsock);
93 int is_bnet_error (BSOCK *bsock);
94 void bnet_suppress_error_messages(BSOCK *bsock, bool flag);
95 dlist *bnet_host2ipaddrs(const char *host, int family, const char **errstr);
96 int bnet_set_blocking (BSOCK *sock);
97 int bnet_set_nonblocking (BSOCK *sock);
98 void bnet_restore_blocking (BSOCK *sock, int flags);
101 int bget_msg(BSOCK *sock);
104 BPIPE * open_bpipe(char *prog, int wait, const char *mode);
105 int close_wpipe(BPIPE *bpipe);
106 int close_bpipe(BPIPE *bpipe);
109 int cram_md5_get_auth(BSOCK *bs, char *password, int *tls_remote_need);
110 int cram_md5_auth(BSOCK *bs, char *password, int tls_local_need);
111 void hmac_md5(uint8_t* text, int text_len, uint8_t* key,
112 int key_len, uint8_t *hmac);
116 uint32_t bcrc32(uint8_t *buf, int len);
119 int init_crypto (void);
120 int cleanup_crypto (void);
121 DIGEST * crypto_digest_new (crypto_digest_t type);
122 bool crypto_digest_update (DIGEST *digest, const void *data, size_t length);
123 bool crypto_digest_finalize (DIGEST *digest, void *dest, size_t *length);
124 void crypto_digest_free (DIGEST *digest);
125 SIGNATURE * crypto_sign_new (void);
126 crypto_error_t crypto_sign_get_digest (SIGNATURE *sig, X509_KEYPAIR *keypair, DIGEST **digest);
127 crypto_error_t crypto_sign_verify (SIGNATURE *sig, X509_KEYPAIR *keypair, DIGEST *digest);
128 int crypto_sign_add_signer (SIGNATURE *sig, DIGEST *digest, X509_KEYPAIR *keypair);
129 int crypto_sign_encode (SIGNATURE *sig, void *dest, size_t *length);
130 SIGNATURE * crypto_sign_decode (const void *sigData, size_t length);
131 void crypto_sign_free (SIGNATURE *sig);
132 CRYPTO_SESSION * crypto_session_new (crypto_cipher_t cipher, alist *pubkeys);
133 void crypto_session_free (CRYPTO_SESSION *cs);
134 bool crypto_session_encode (CRYPTO_SESSION *cs, void *dest, size_t *length);
135 crypto_error_t crypto_session_decode (const void *data, size_t length, alist *keypairs, CRYPTO_SESSION **session);
136 CRYPTO_SESSION * crypto_session_decode (const void *data, size_t length);
137 CIPHER_CONTEXT * crypto_cipher_new (CRYPTO_SESSION *cs, bool encrypt, size_t *blocksize);
138 bool crypto_cipher_update (CIPHER_CONTEXT *cipher_ctx, const void *data, size_t length, const void *dest, size_t *written);
139 bool crypto_cipher_finalize (CIPHER_CONTEXT *cipher_ctx, void *dest, size_t *written);
140 void crypto_cipher_free (CIPHER_CONTEXT *cipher_ctx);
141 X509_KEYPAIR * crypto_keypair_new (void);
142 X509_KEYPAIR * crypto_keypair_dup (X509_KEYPAIR *keypair);
143 int crypto_keypair_load_cert (X509_KEYPAIR *keypair, const char *file);
144 bool crypto_keypair_has_key (const char *file);
145 int crypto_keypair_load_key (X509_KEYPAIR *keypair, const char *file, CRYPTO_PEM_PASSWD_CB *pem_callback, const void *pem_userdata);
146 void crypto_keypair_free (X509_KEYPAIR *keypair);
147 int crypto_default_pem_callback (char *buf, int size, const void *userdata);
148 const char * crypto_digest_name (DIGEST *digest);
149 crypto_digest_t crypto_digest_stream_type (int stream);
150 const char * crypto_strerror (crypto_error_t error);
153 void daemon_start ();
156 uint64_t str_to_uint64(char *str);
157 int64_t str_to_int64(char *str);
158 #define str_to_int32(str) ((int32_t)str_to_int64(str))
159 char * edit_uint64_with_commas (uint64_t val, char *buf);
160 char * edit_uint64_with_suffix (uint64_t val, char *buf);
161 char * add_commas (char *val, char *buf);
162 char * edit_uint64 (uint64_t val, char *buf);
163 char * edit_int64 (int64_t val, char *buf);
164 bool duration_to_utime (char *str, utime_t *value);
165 bool size_to_uint64(char *str, int str_len, uint64_t *rtn_value);
166 char *edit_utime (utime_t val, char *buf, int buf_len);
167 bool is_a_number (const char *num);
168 bool is_an_integer (const char *n);
169 bool is_name_valid (char *name, POOLMEM **msg);
171 /* jcr.c (most definitions are in src/jcr.h) */
172 void init_last_jobs_list();
173 void term_last_jobs_list();
174 void lock_last_jobs_list();
175 void unlock_last_jobs_list();
176 bool read_last_jobs_list(int fd, uint64_t addr);
177 uint64_t write_last_jobs_list(int fd, uint64_t addr);
178 void write_state_file(char *dir, const char *progname, int port);
179 void job_end_push(JCR *jcr, void job_end_cb(JCR *jcr,void *), void *ctx);
182 JCR *jcr_walk_start();
183 JCR *jcr_walk_next(JCR *prev_jcr);
184 void jcr_walk_end(JCR *jcr);
188 LEX * lex_close_file (LEX *lf);
189 LEX * lex_open_file (LEX *lf, const char *fname, LEX_ERROR_HANDLER *scan_error);
190 int lex_get_char (LEX *lf);
191 void lex_unget_char (LEX *lf);
192 const char * lex_tok_to_str (int token);
193 int lex_get_token (LEX *lf, int expect);
194 void lex_set_default_error_handler (LEX *lf);
197 void my_name_is (int argc, char *argv[], const char *name);
198 void init_msg (JCR *jcr, MSGS *msg);
199 void term_msg (void);
200 void close_msg (JCR *jcr);
201 void add_msg_dest (MSGS *msg, int dest, int type, char *where, char *dest_code);
202 void rem_msg_dest (MSGS *msg, int dest, int type, char *where);
203 void Jmsg (JCR *jcr, int type, time_t mtime, const char *fmt, ...);
204 void dispatch_message (JCR *jcr, int type, time_t mtime, char *buf);
205 void init_console_msg (const char *wd);
206 void free_msgs_res (MSGS *msgs);
207 void dequeue_messages (JCR *jcr);
208 void set_trace (int trace_flag);
211 void bnet_thread_server(dlist *addr, int max_clients, workq_t *client_wq,
212 void *handle_client_request(void *bsock));
213 void bnet_stop_thread_server(pthread_t tid);
214 void bnet_server (int port, void handle_client_request(BSOCK *bsock));
215 int net_connect (int port);
216 BSOCK * bnet_bind (int port);
217 BSOCK * bnet_accept (BSOCK *bsock, char *who);
220 char *getuser(uid_t uid);
221 void free_getuser_cache();
222 char *getgroup (gid_t gid);
223 void free_getgroup_cache();
226 typedef int (EVENT_HANDLER)(JCR *jcr, const char *event);
227 void init_python_interpreter(const char *progname, const char *scripts,
229 void term_python_interpreter();
230 //extern EVENT_HANDLER *generate_daemon_event;
231 int generate_daemon_event(JCR *jcr, const char *event);
233 void unlock_python();
236 void init_signals (void terminate(int sig));
237 void init_stack_dump (void);
240 void strip_leading_space (char *str);
241 void strip_trailing_junk (char *str);
242 void strip_trailing_newline (char *str);
244 void strip_trailing_slashes (char *dir);
245 bool skip_spaces (char **msg);
246 bool skip_nonspaces (char **msg);
247 int fstrsch (const char *a, const char *b);
248 char *next_arg(char **s);
249 int parse_args(POOLMEM *cmd, POOLMEM **args, int *argc,
250 char **argk, char **argv, int max_args);
251 void split_path_and_filename(const char *fname, POOLMEM **path,
252 int *pnl, POOLMEM **file, int *fnl);
253 int bsscanf(const char *buf, const char *fmt, ...);
257 TLS_CONTEXT *new_tls_context (const char *ca_certfile,
258 const char *ca_certdir,
259 const char *certfile,
261 CRYPTO_PEM_PASSWD_CB *pem_callback,
262 const void *pem_userdata,
265 void free_tls_context (TLS_CONTEXT *ctx);
267 bool tls_postconnect_verify_host (TLS_CONNECTION *tls,
269 bool tls_postconnect_verify_cn (TLS_CONNECTION *tls,
271 TLS_CONNECTION *new_tls_connection (TLS_CONTEXT *ctx, int fd);
272 void free_tls_connection (TLS_CONNECTION *tls);
273 bool tls_bsock_connect (BSOCK *bsock);
274 bool tls_bsock_accept (BSOCK *bsock);
275 void tls_bsock_shutdown (BSOCK *bsock);
276 int tls_bsock_writen (BSOCK *bsock, char *ptr, int32_t nbytes);
277 int tls_bsock_readn (BSOCK *bsock, char *ptr, int32_t nbytes);
278 #endif /* HAVE_TLS */
282 int is_buf_zero (char *buf, int len);
283 void lcase (char *str);
284 void bash_spaces (char *str);
285 void bash_spaces (POOL_MEM &pm);
286 void unbash_spaces (char *str);
287 void unbash_spaces (POOL_MEM &pm);
288 char * encode_time (time_t time, char *buf);
289 char * encode_mode (mode_t mode, char *buf);
290 int do_shell_expansion (char *name, int name_len);
291 void jobstatus_to_ascii (int JobStatus, char *msg, int maxlen);
292 int run_program (char *prog, int wait, POOLMEM *results);
293 int run_program_full_output (char *prog, int wait, POOLMEM *results);
294 const char * job_type_to_str (int type);
295 const char * job_status_to_str (int stat);
296 const char * job_level_to_str (int level);
297 void make_session_key (char *key, char *seed, int mode);
298 POOLMEM *edit_job_codes(JCR *jcr, char *omsg, char *imsg, const char *to);
299 void set_working_directory(char *wd);
303 int start_watchdog(void);
304 int stop_watchdog(void);
305 watchdog_t *new_watchdog(void);
306 bool register_watchdog(watchdog_t *wd);
307 bool unregister_watchdog(watchdog_t *wd);
310 btimer_t *start_child_timer(pid_t pid, uint32_t wait);
311 void stop_child_timer(btimer_t *wid);
312 btimer_t *start_thread_timer(pthread_t tid, uint32_t wait);
313 void stop_thread_timer(btimer_t *wid);
314 btimer_t *start_bsock_timer(BSOCK *bs, uint32_t wait);
315 void stop_bsock_timer(btimer_t *wid);