1/*
2 * Copyright 2002-2006, Haiku, Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Philippe Houdoin
7 *		J��r��me Duval, korli@users.berlios.de
8 *		Axel D��rfler, axeld@pinc-software.de
9 */
10
11
12#include <SupportDefs.h>
13#include <TLS.h>
14
15#include <stdio.h>
16#include <string.h>
17#include <unistd.h>
18
19
20struct net_settings;
21
22extern "C" {
23	int *_h_errnop(void);
24	int _netstat(int fd, char **output, int verbose);
25	int _socket_interrupt(void);
26	int closesocket(int socket);
27	char *find_net_setting(net_settings* settings, const char* heading,
28		const char* name, char* value, unsigned numBytes);
29	status_t set_net_setting(net_settings* settings, const char* heading,
30		const char* name, const char* value);
31	int getusername(char *user, size_t bufferLength);
32	int getpassword(char *password, size_t bufferLength);
33	char *_netconfig_find(const char *heaading, const char *name, char *value, int nbytes);
34}
35
36
37int32 __gHErrnoTLS = tls_allocate();
38
39
40int *
41_h_errnop(void)
42{
43	return (int *)tls_address(__gHErrnoTLS);
44}
45
46
47int
48_netstat(int fd, char **output, int verbose)
49{
50	return ENOSYS;
51}
52
53
54int
55_socket_interrupt(void)
56{
57	return -1;
58}
59
60
61int
62closesocket(int socket)
63{
64	return close(socket);
65}
66
67
68/* TODO: This is a terrible hack :(
69 * TODO: We should really get these settings values by parsing the real settings
70 */
71
72char *
73find_net_setting(net_settings* settings, const char* heading,
74	const char* name, char* value, unsigned numBytes)
75{
76	if (strcmp(heading, "GLOBAL") != 0)
77		return NULL;
78
79	if (!strcmp(name, "HOSTNAME"))
80		strlcpy(value, "hostname", numBytes);
81	else if (!strcmp(name, "USERNAME"))
82		strlcpy(value, "baron", numBytes);
83	else if (!strcmp(name, "PASSWORD"))
84		strlcpy(value, "password", numBytes);
85	else if (!strcmp(name, "FTP_ENABLED"))
86		strlcpy(value, "1", numBytes);
87	else if (!strcmp(name, "TELNETD_ENABLED"))
88		strlcpy(value, "1", numBytes);
89	else
90		return NULL;
91
92	return value;
93}
94
95
96status_t
97set_net_setting(net_settings* settings, const char* heading,
98	const char* name, const char* value)
99{
100	return B_UNSUPPORTED;
101}
102
103
104int
105getusername(char *user, size_t length)
106{
107	if (find_net_setting(NULL, "GLOBAL", "USERNAME", user, length) == NULL)
108		return B_ERROR;
109
110	return strlen(user);
111}
112
113
114int
115getpassword(char *password, size_t length)
116{
117	if (find_net_setting(NULL, "GLOBAL", "PASSWORD", password, length) == NULL)
118		return B_ERROR;
119
120	return strlen(password);
121}
122
123char *
124_netconfig_find(const char *heading, const char *name, char *value, int nbytes)
125{
126	return find_net_setting(NULL, heading, name, value, nbytes);
127}
128