VirtualBox

source: vbox/trunk/src/VBox/Main/src-server/HostDnsServiceResolvConf.cpp

Last change on this file was 98293, checked in by vboxsync, 16 months ago

Main/src-server: hr -> hrc. bugref:10223

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.9 KB
Line 
1/* $Id: HostDnsServiceResolvConf.cpp 98293 2023-01-25 01:22:39Z vboxsync $ */
2/** @file
3 * Base class for Host DNS & Co services.
4 */
5
6/*
7 * Copyright (C) 2014-2023 Oracle and/or its affiliates.
8 *
9 * This file is part of VirtualBox base platform packages, as
10 * available from https://www.virtualbox.org.
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation, in version 3 of the
15 * License.
16 *
17 * This program is distributed in the hope that it will be useful, but
18 * WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, see <https://www.gnu.org/licenses>.
24 *
25 * SPDX-License-Identifier: GPL-3.0-only
26 */
27
28/* -*- indent-tabs-mode: nil; -*- */
29#include <VBox/com/string.h>
30#include <VBox/com/ptr.h>
31
32
33#ifdef RT_OS_OS2
34# include <sys/socket.h>
35typedef int socklen_t;
36#endif
37
38#include <stdio.h>
39#include <sys/socket.h>
40#include <netinet/in.h>
41#include <arpa/inet.h>
42
43
44#include <iprt/assert.h>
45#include <iprt/errcore.h>
46#include <iprt/file.h>
47#include <iprt/critsect.h>
48
49#include <VBox/log.h>
50
51#include <iprt/sanitized/string>
52
53#include "HostDnsService.h"
54#include "../../Devices/Network/slirp/resolv_conf_parser.h"
55
56
57struct HostDnsServiceResolvConf::Data
58{
59 Data(const char *fileName)
60 : resolvConfFilename(fileName)
61 {
62 };
63
64 std::string resolvConfFilename;
65};
66
67HostDnsServiceResolvConf::~HostDnsServiceResolvConf()
68{
69 if (m)
70 {
71 delete m;
72 m = NULL;
73 }
74}
75
76HRESULT HostDnsServiceResolvConf::init(HostDnsMonitorProxy *pProxy, const char *aResolvConfFileName)
77{
78 HRESULT hrc = HostDnsServiceBase::init(pProxy);
79 AssertComRCReturn(hrc, hrc);
80
81 m = new Data(aResolvConfFileName);
82 AssertPtrReturn(m, E_OUTOFMEMORY);
83
84 return readResolvConf();
85}
86
87void HostDnsServiceResolvConf::uninit(void)
88{
89 if (m)
90 {
91 delete m;
92 m = NULL;
93 }
94
95 HostDnsServiceBase::uninit();
96}
97
98const std::string& HostDnsServiceResolvConf::getResolvConf(void) const
99{
100 return m->resolvConfFilename;
101}
102
103HRESULT HostDnsServiceResolvConf::readResolvConf(void)
104{
105 struct rcp_state st;
106
107 st.rcps_flags = RCPSF_NO_STR2IPCONV;
108 int vrc = rcp_parse(&st, m->resolvConfFilename.c_str());
109 if (vrc == -1)
110 return S_OK;
111
112 HostDnsInformation info;
113 for (unsigned i = 0; i != st.rcps_num_nameserver; ++i)
114 {
115 AssertBreak(st.rcps_str_nameserver[i]);
116 info.servers.push_back(st.rcps_str_nameserver[i]);
117 }
118
119 if (st.rcps_domain)
120 info.domain = st.rcps_domain;
121
122 for (unsigned i = 0; i != st.rcps_num_searchlist; ++i)
123 {
124 AssertBreak(st.rcps_searchlist[i]);
125 info.searchList.push_back(st.rcps_searchlist[i]);
126 }
127 setInfo(info);
128
129 return S_OK;
130}
131
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use