restrict domain to 5 segments at max
This commit is contained in:
parent
0fcd68c38b
commit
b147257993
1 changed files with 12 additions and 8 deletions
22
src/util.zig
22
src/util.zig
|
@ -7,19 +7,18 @@ const ArgError = error{
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const IP_VER_ENUM = enum(u3) {
|
pub const IP_VER_ENUM = enum(u3) {
|
||||||
Both = 0,
|
|
||||||
IPv4 = 4,
|
IPv4 = 4,
|
||||||
IPv6 = 6,
|
IPv6 = 6,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const IPs = struct {
|
pub const IPs = struct {
|
||||||
v4: [:0]const u8,
|
v4: []const u8,
|
||||||
v6: [:0]const u8,
|
v6: []const u8,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const Domain = struct {
|
pub const Domain = struct {
|
||||||
name: [:0]const u8,
|
name: [:0]const u8,
|
||||||
labels: u4,
|
labels: [5][]const u8,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub fn check_perms() !void {
|
pub fn check_perms() !void {
|
||||||
|
@ -38,7 +37,7 @@ pub fn get_input() !struct {
|
||||||
const domain = try check_domain(domain_str);
|
const domain = try check_domain(domain_str);
|
||||||
|
|
||||||
const ip_ver_str = args.next() orelse return ArgError.NotEnoughArgs;
|
const ip_ver_str = args.next() orelse return ArgError.NotEnoughArgs;
|
||||||
const ip_ver = std.meta.intToEnum(IP_VER_ENUM, try std.fmt.parseInt(u3, ip_ver_str, 10)) catch return ArgError.InvalidAddressVer;
|
const ip_ver = std.meta.intToEnum(IP_VER_ENUM, std.fmt.parseInt(u3, ip_ver_str, 10) catch return ArgError.InvalidAddressVer) catch return ArgError.InvalidAddressVer;
|
||||||
|
|
||||||
return .{ domain, ip_ver };
|
return .{ domain, ip_ver };
|
||||||
}
|
}
|
||||||
|
@ -46,15 +45,20 @@ pub fn get_input() !struct {
|
||||||
fn check_domain(domain_str: [:0]const u8) !Domain {
|
fn check_domain(domain_str: [:0]const u8) !Domain {
|
||||||
var domain = Domain{
|
var domain = Domain{
|
||||||
.name = domain_str,
|
.name = domain_str,
|
||||||
.labels = 0,
|
.labels = [_][]const u8{&[_]u8{}} ** 5,
|
||||||
};
|
};
|
||||||
var labels = std.mem.split(u8, domain_str, ".");
|
var labels = std.mem.split(u8, domain_str, ".");
|
||||||
var last: []const u8 = "";
|
var last: []const u8 = "";
|
||||||
|
var i: usize = 0;
|
||||||
while (labels.next()) |segment| {
|
while (labels.next()) |segment| {
|
||||||
last = segment;
|
if (i >= 5) {
|
||||||
domain.labels += 1;
|
return ArgError.BadDomain;
|
||||||
}
|
}
|
||||||
if (domain.labels <= 1 or !std.mem.eql(u8, last, "local")) {
|
last = segment;
|
||||||
|
domain.labels[i] = segment;
|
||||||
|
i += 1;
|
||||||
|
}
|
||||||
|
if (domain.labels.len <= 1 or !std.mem.eql(u8, last, "local")) {
|
||||||
return ArgError.BadDomain;
|
return ArgError.BadDomain;
|
||||||
}
|
}
|
||||||
return domain;
|
return domain;
|
||||||
|
|
Loading…
Reference in a new issue