mirror of
https://github.com/Cacti/spine.git
synced 2026-10-23 03:27:10 +09:00
Open and own the required ICMP sockets before permanently dropping setuid root, then parse input without elevated identity. Close-on-exec socket ownership, shared IPv4/IPv6 dispatch and fault-injected identity/capability calls are covered. The owned fixture tests check deny/allow behavior without contacting external devices. Step 2/14 of the complete C17/native-correctness series. Base: the preceding series branch; merge/review in order so this PR shows only its own step. Earlier validation, before this review follow-up, in isolated copied snapshots on Linux arm64: - Clean GCC build and make check: 13 passed, 1 existing prerequisite skips, 0 failures. - ASan/UBSan: 12 passed, 2 existing privilege/allocator-interposition prerequisite skips, 0 failures; no sanitizer findings. - Production source/profile integrity verification against disposable MariaDB and loopback SNMP fixtures passed. - Release archive extracted into a separate source tree and built/tested out of tree; fuzz checks passed. Earlier local profiles retain source hashes for the copied validation tree; GitHub checks validate the published commit. No production database/device, host installation or live privilege change is part of validation. Existing prerequisite skips were retained; no test or finding was suppressed to obtain a pass. Series navigation: [Series index](https://github.com/Cacti/spine/pull/638); [previous step](https://github.com/Cacti/spine/pull/638). [Next step](https://github.com/Cacti/spine/pull/640). Review follow-up (2026-10-09): Restacked on the corrected preceding branches. The SNMP status fix is introduced in #638, the reindex/completion fixes in #640, and focused regression coverage in #650. Restacked tip validation: isolated Linux arm64 build and make check passed (18 passed, 1 setuid prerequisite skip, no failures). GitHub checks validate the updated published commits; earlier profile/archive/sanitizer evidence above belongs to the previous revisions. --------- Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>
63 lines
3.5 KiB
C
63 lines
3.5 KiB
C
/*
|
|
ex: set tabstop=4 shiftwidth=4 autoindent:
|
|
+-------------------------------------------------------------------------+
|
|
| Copyright (C) 2004-2026 The Cacti Group |
|
|
| |
|
|
| This program is free software; you can redistribute it and/or |
|
|
| modify it under the terms of the GNU Lesser General Public |
|
|
| License as published by the Free Software Foundation; either |
|
|
| version 2.1 of the License, or (at your option) any later version. |
|
|
| |
|
|
| This program is distributed in the hope that it will be useful, |
|
|
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
|
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
|
| GNU Lesser General Public License for more details. |
|
|
| |
|
|
| You should have received a copy of the GNU Lesser General Public |
|
|
| License along with this library; if not, write to the Free Software |
|
|
| Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
|
|
| 02110-1301, USA |
|
|
| |
|
|
+-------------------------------------------------------------------------+
|
|
| spine: a backend data gatherer for cacti |
|
|
+-------------------------------------------------------------------------+
|
|
| This poller would not have been possible without: |
|
|
| - Larry Adams (current development and enhancements) |
|
|
| - Rivo Nurges (rrd support, mysql poller cache, misc functions) |
|
|
| - RTG (core poller code, pthreads, snmp, autoconf examples) |
|
|
| - Brady Alleman/Doug Warner (threading ideas, implementation details) |
|
|
+-------------------------------------------------------------------------+
|
|
| - Cacti - http://www.cacti.net/ |
|
|
+-------------------------------------------------------------------------+
|
|
*/
|
|
|
|
#ifndef SPINE_SQL_H
|
|
#define SPINE_SQL_H
|
|
typedef struct db_address {
|
|
char *storage;
|
|
char *hostname;
|
|
char *socket;
|
|
} db_address_t;
|
|
extern void db_address_init(db_address_t *address, const char *value, bool parse_socket);
|
|
extern void db_address_release(db_address_t *address);
|
|
|
|
extern int db_insert(MYSQL *mysql, int type, const char *query);
|
|
extern MYSQL_RES *db_query(MYSQL *mysql, int type, const char *query);
|
|
extern int db_connect(int type, MYSQL *mysql);
|
|
extern void db_disconnect(MYSQL *mysql);
|
|
extern void db_escape(MYSQL *mysql, char *output, int max_size, const char *input);
|
|
extern void db_free_result(MYSQL_RES *result);
|
|
extern void db_create_connection_pool(int type);
|
|
extern void db_close_connection_pool(int type);
|
|
extern pool_t *db_get_connection(int type);
|
|
extern void db_release_connection(int type, int id);
|
|
extern int db_set_session_mode(MYSQL *mysql);
|
|
extern int db_reconnect(MYSQL *mysql, int type, int error, const char *location);
|
|
extern int db_column_exists(MYSQL *mysql, int type, const char *table, const char *column);
|
|
|
|
extern int append_hostrange(char *obuf, size_t capacity, const char *colname);
|
|
|
|
extern void db_set_option(MYSQL *mysql, enum mysql_option option, const void *value, const char *description);
|
|
|
|
#endif /* SPINE_SQL_H */
|