/*1* SPDX-License-Identifier: ISC2*3* Copyright (c) 2010, 2013, 2014 Todd C. Miller <[email protected]>4*5* Permission to use, copy, modify, and distribute this software for any6* purpose with or without fee is hereby granted, provided that the above7* copyright notice and this permission notice appear in all copies.8*9* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES10* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF11* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR12* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES13* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN14* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF15* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.16*/1718#ifndef SUDO_DSO_H19#define SUDO_DSO_H2021/* Values for sudo_dso_load() mode. */22#define SUDO_DSO_LAZY 0x123#define SUDO_DSO_NOW 0x224#define SUDO_DSO_GLOBAL 0x425#define SUDO_DSO_LOCAL 0x82627/* Special handle arguments for sudo_dso_findsym(). */28#define SUDO_DSO_NEXT ((void *)-1) /* Search subsequent objects. */29#define SUDO_DSO_DEFAULT ((void *)-2) /* Use default search algorithm. */30#define SUDO_DSO_SELF ((void *)-3) /* Search the caller itself. */3132/* Internal structs for static linking of plugins. */33struct sudo_preload_symbol {34const char *name;35void *addr;36};37struct sudo_preload_table {38const char *path;39void *handle;40struct sudo_preload_symbol *symbols;41};4243/* Public functions. */44sudo_dso_public char *sudo_dso_strerror_v1(void);45sudo_dso_public int sudo_dso_unload_v1(void *handle);46sudo_dso_public void *sudo_dso_findsym_v1(void *handle, const char *symbol);47sudo_dso_public void *sudo_dso_load_v1(const char *path, int mode);48sudo_dso_public void sudo_dso_preload_table_v1(struct sudo_preload_table *table);4950#define sudo_dso_strerror() sudo_dso_strerror_v1()51#define sudo_dso_unload(_a) sudo_dso_unload_v1((_a))52#define sudo_dso_findsym(_a, _b) sudo_dso_findsym_v1((_a), (_b))53#define sudo_dso_load(_a, _b) sudo_dso_load_v1((_a), (_b))54#define sudo_dso_preload_table(_a) sudo_dso_preload_table_v1((_a))5556#endif /* SUDO_DSO_H */575859