Shrinidhikulkarni7 / OracleClient_Alpine

Installing oracle client for alpine docker image
MIT License
45 stars 24 forks source link

Update script for Alpine 3.17, Oracle 21 + ODBC #10

Open OwnageIsMagic opened 1 year ago

OwnageIsMagic commented 1 year ago

It still missing some symbols but they can be easily stubbed (they only called on edge cases, probably never) Export this symbols from any lib in process (or via LD_PRELOAD)

#ifndef WIN32

#include <features.h>
#ifndef __USE_GNU // probably musl

#include <sys/types.h>
#include <netinet/in.h>
#include <resolv.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

// glibc stubs for Oracle OCI compat on Alpine
extern "C" {
#pragma GCC visibility push(default)
int __dn_expand(const unsigned char *msg, const unsigned char *eomorig, const unsigned char *comp_dn, char *exp_dn, int length) { exit(90); }
int __dn_skipname(const u_char *comp_dn, const u_char *eom) { exit(90); }
void __res_nclose(res_state statep) { exit(90); }
int __res_ninit(res_state statep) { exit(90); }
int __res_nsearch(res_state statep, const char *dname, int class, int type, unsigned char *answer, int anslen) { exit(90); }

int __finite(double x) { return isfinite(x); }
int __fprintf_chk(FILE* stream, const char* format, ...) { exit(90); }
int __printf_chk(const char* format, ...) { exit(90); }
// Apache 2.0 // https://android.googlesource.com/platform/bionic/+/e0959b4b164a26eb9931ed6925c71d7870c063fe/libc/bionic/__vsprintf_chk.cpp
int __vsprintf_chk(char* dest, int /*flags*/, size_t dest_len_from_compiler, const char* format, va_list va) {
  int result = vsnprintf(dest, dest_len_from_compiler, format, va);
  if ((size_t) result >= dest_len_from_compiler) {
    exit(100); // ("vsprintf: prevented write past end of buffer", 0);
  }
  return result;
}

char **backtrace_symbols(void *const *buffer, int size) { exit(90); }
int backtrace(void **buffer, int size) { exit(90); }

int bindresvport(int sockfd, struct sockaddr_in *sin) { exit(90); }
char* canonicalize_file_name(const char* path) { return realpath(path, NULL); }
struct __ucontext {};
int getcontext(__ucontext* ) { exit(90); }
#pragma GCC visibility pop
}

#endif // musl

#endif