1
0
Fork 0
mirror of https://gitlab.com/niansa/nosni.git synced 2025-03-06 20:53:26 +01:00

Initial commit

This commit is contained in:
niansa/tuxifan 2023-04-13 09:09:03 +02:00
commit 5368108949
6 changed files with 87 additions and 0 deletions

2
.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
*.so
*.o

7
Makefile Normal file
View file

@ -0,0 +1,7 @@
libnosni.so: nss.c common.c common.cpp common.h
g++ -c common.cpp -o cpp.o
gcc -g -fPIC -shared -I /usr/include/nspr/ nss.c common.c cpp.o -o libnosni.so
rm -f cpp.o
clean:
rm -f *.so *.o

29
common.c Normal file
View file

@ -0,0 +1,29 @@
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
const char *resolve_hostname_to_str(const char *hostname) {
struct addrinfo *addrInfo;
char str[INET_ADDRSTRLEN];
// Set up hints
struct addrinfo hints;
memset(&hints, 0, sizeof(struct addrinfo));
hints.ai_family = AF_INET; //TODO: Care about IPv6
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_flags = AI_CANONNAME;
// Get addrinfo
int error = getaddrinfo(hostname, "https", &hints, &addrInfo);
if (addrInfo == NULL) return NULL;
// Return addr
struct sockaddr_in *addr = (struct sockaddr_in *)addrInfo->ai_addr;
return inet_ntoa((struct in_addr)addr->sin_addr);
}

1
common.cpp Normal file
View file

@ -0,0 +1 @@

1
common.h Normal file
View file

@ -0,0 +1 @@
const char *resolve_hostname_to_str(const char *hostname);

47
nss.c Normal file
View file

@ -0,0 +1,47 @@
#include "common.h"
#include <stdio.h>
#include <dlfcn.h>
#include <nss/ssl.h>
#include <nss/cms.h>
SECStatus SSL_SNISocketConfigHook(PRFileDesc *fd,
SSLSNISocketConfig f,
void *arg) {
// Debug
printf("Interrupted socket config hook setter; dummy not implemented. Returning error.\n");
fflush(stdout);
// Report failure
return SECFailure;
}
SECStatus SSL_SetURL(PRFileDesc *fd, const char *url) {
// Debug
printf("Interrupted URL setter for %s; setting IP address on success.\n", url);
fflush(stdout);
// Get original function
static typeof(SSL_SetURL) *orig = NULL;
if (!orig) orig = dlsym(RTLD_NEXT, "SSL_SetURL");
// Get IP addr as string
url = resolve_hostname_to_str(url);
if (!url) return SECFailure;
// Call origin function
orig(fd, url);
// Report success
return SECSuccess;
}
extern char *
NSS_CMSSignerInfo_GetSignerCommonName(NSSCMSSignerInfo *sinfo) {
printf("Interrupted common signer name getter; returning debug domain.\n");
fflush(stdout);
return strdup("hello.com");
}