fe.h 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. /** BEGIN COPYRIGHT BLOCK
  2. * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
  3. * Copyright (C) 2005 Red Hat, Inc.
  4. * All rights reserved.
  5. *
  6. * License: GPL (version 3 or any later version).
  7. * See LICENSE for details.
  8. * END COPYRIGHT BLOCK **/
  9. #ifdef HAVE_CONFIG_H
  10. # include <config.h>
  11. #endif
  12. #ifndef _SLAPD_FE_H_
  13. #define _SLAPD_FE_H_
  14. #include <prio.h>
  15. #include "slap.h"
  16. /*
  17. * Global Variables...
  18. */
  19. extern Slapi_Counter *ops_initiated;
  20. extern Slapi_Counter *ops_completed;
  21. extern Slapi_Counter *max_threads_count;
  22. extern Slapi_Counter *conns_in_maxthreads;
  23. extern PRThread *listener_tid;
  24. extern PRThread *listener_tid;
  25. extern Slapi_Counter *num_conns;
  26. extern char *pid_file;
  27. extern char *start_pid_file;
  28. extern int should_detach;
  29. extern int connection_type; /* JCM - Evil. Solve by creating a real connection constructor & destructor */
  30. #ifndef HAVE_TIME_R
  31. extern PRLock *time_func_mutex;
  32. #endif /* HAVE_TIME_R */
  33. extern PRLock *currenttime_mutex;
  34. extern time_t starttime;
  35. extern char *configfile;
  36. /*
  37. * auth.c
  38. *
  39. */
  40. void client_auth_init();
  41. void handle_handshake_done (PRFileDesc *prfd, void* clientData);
  42. int handle_bad_certificate (void* clientData, PRFileDesc *prfd);
  43. /*
  44. * connection.c
  45. */
  46. void op_thread_cleanup();
  47. /* do this after all worker threads have terminated */
  48. void connection_post_shutdown_cleanup();
  49. /*
  50. * connection.c
  51. */
  52. void connection_abandon_operations( Connection *conn );
  53. int connection_activity( Connection *conn, int maxthreads );
  54. void init_op_threads();
  55. int connection_new_private(Connection *conn);
  56. void connection_remove_operation( Connection *conn, Operation *op );
  57. void connection_remove_operation_ext( Slapi_PBlock *pb, Connection *conn, Operation *op );
  58. int connection_operations_pending( Connection *conn, Operation *op2ignore,
  59. int test_resultsent );
  60. void connection_done(Connection *conn);
  61. void connection_cleanup(Connection *conn);
  62. void connection_reset(Connection* conn, int ns, PRNetAddr * from, int fromLen, int is_SSL);
  63. void connection_set_io_layer_cb( Connection *c, Conn_IO_Layer_cb push_cb, Conn_IO_Layer_cb pop_cb, void *cb_data );
  64. int connection_call_io_layer_callbacks( Connection *c );
  65. /*
  66. * conntable.c
  67. */
  68. /*
  69. * Note: the correct order to use when acquiring multiple locks is
  70. * c[i]->c_mutex followed by table_mutex.
  71. */
  72. struct connection_table
  73. {
  74. int size;
  75. /* An array of connections, file descriptors, and a mapping between them. */
  76. Connection *c;
  77. struct POLL_STRUCT *fd;
  78. int n_tcps; /* standard socket start index in fd */
  79. int n_tcpe; /* standard socket last ( +1 ) index in fd */
  80. int s_tcps; /* ssl socket start index in fd */
  81. int s_tcpe; /* ssl socket last ( +1 ) in fd */
  82. #if defined(ENABLE_LDAPI)
  83. int i_unixs; /* unix socket start index in fd */
  84. int i_unixe; /* unix socket last ( +1 ) in fd */
  85. #endif /* ENABLE_LDAPI */
  86. PRLock *table_mutex;
  87. };
  88. typedef struct connection_table Connection_Table;
  89. extern Connection_Table *the_connection_table; /* JCM - Exported from globals.c for daemon.c, monitor.c, puke, gag, etc */
  90. Connection_Table *connection_table_new(int table_size);
  91. void connection_table_free(Connection_Table *ct);
  92. void connection_table_abandon_all_operations(Connection_Table *ct);
  93. Connection *connection_table_get_connection(Connection_Table *ct, int sd);
  94. int connection_table_move_connection_out_of_active_list(Connection_Table *ct, Connection *c);
  95. void connection_table_move_connection_on_to_active_list(Connection_Table *ct, Connection *c);
  96. void connection_table_as_entry(Connection_Table *ct, Slapi_Entry *e);
  97. void connection_table_dump_activity_to_errors_log(Connection_Table *ct);
  98. Connection* connection_table_get_first_active_connection (Connection_Table *ct);
  99. Connection* connection_table_get_next_active_connection (Connection_Table *ct, Connection *c);
  100. typedef int (*Connection_Table_Iterate_Function)(Connection *c, void *arg);
  101. int connection_table_iterate_active_connections(Connection_Table *ct, void* arg, Connection_Table_Iterate_Function f);
  102. /*
  103. * daemon.c
  104. */
  105. int signal_listner();
  106. int daemon_pre_setuid_init(daemon_ports_t *ports);
  107. void slapd_daemon( daemon_ports_t *ports );
  108. void daemon_register_connection();
  109. int slapd_listenhost2addr( const char *listenhost, PRNetAddr ***addr );
  110. int daemon_register_reslimits( void );
  111. PRFileDesc * get_ssl_listener_fd();
  112. int configure_pr_socket( PRFileDesc **pr_socket, int secure, int local );
  113. void configure_ns_socket( int * ns );
  114. void ns_enable_listeners();
  115. /*
  116. * sasl_io.c
  117. */
  118. int sasl_io_enable(Connection *c, void *data);
  119. int sasl_io_cleanup(Connection *c, void *data);
  120. /*
  121. * sasl_map.c
  122. */
  123. typedef struct sasl_map_data_ sasl_map_data;
  124. struct sasl_map_data_ {
  125. char *name;
  126. char *regular_expression;
  127. char *template_base_dn;
  128. char *template_search_filter;
  129. int priority;
  130. sasl_map_data *next; /* For linked list */
  131. sasl_map_data *prev;
  132. };
  133. typedef struct _sasl_map_private {
  134. Slapi_RWLock *lock;
  135. sasl_map_data *map_data_list;
  136. } sasl_map_private;
  137. int sasl_map_config_add(Slapi_PBlock *pb, Slapi_Entry* entryBefore, Slapi_Entry* e, int *returncode, char *returntext, void *arg);
  138. int sasl_map_config_delete(Slapi_PBlock *pb, Slapi_Entry* entryBefore, Slapi_Entry* e, int *returncode, char *returntext, void *arg);
  139. int sasl_map_config_modify(Slapi_PBlock *pb, Slapi_Entry* entryBefore, Slapi_Entry* e, int *returncode, char *returntext, void *arg);
  140. int sasl_map_domap(sasl_map_data **map, char *sasl_user, char *sasl_realm, char **ldap_search_base, char **ldap_search_filter);
  141. int sasl_map_init();
  142. int sasl_map_done();
  143. void sasl_map_read_lock();
  144. void sasl_map_read_unlock();
  145. #endif