macserialrb 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +16 -0
- data/.rspec +3 -0
- data/.travis.yml +6 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +37 -0
- data/LICENSE.txt +21 -0
- data/README.md +63 -0
- data/Rakefile +14 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/exe/macserialrb +3 -0
- data/ext/macserialrb/extconf.rb +11 -0
- data/ext/macserialrb/macserial/FORMAT.md +221 -0
- data/ext/macserialrb/macserial/Makefile +14 -0
- data/ext/macserialrb/macserial/README.md +7 -0
- data/ext/macserialrb/macserial/cccdump.py +96 -0
- data/ext/macserialrb/macserial/macserial.c +971 -0
- data/ext/macserialrb/macserial/macserial.h +96 -0
- data/ext/macserialrb/macserial/modelinfo.h +182 -0
- data/ext/macserialrb/macserial/modelinfo_autogen.h +9758 -0
- data/ext/macserialrb/macserialrb.c +102 -0
- data/ext/macserialrb/macserialrb.h +12 -0
- data/lib/macserialrb.rb +7 -0
- data/lib/macserialrb/version.rb +3 -0
- data/macserialrb.gemspec +30 -0
- metadata +76 -0
@@ -0,0 +1,102 @@
|
|
1
|
+
#include "macserialrb.h"
|
2
|
+
|
3
|
+
#include <limits.h>
|
4
|
+
#include <stdbool.h>
|
5
|
+
#include <stdio.h>
|
6
|
+
#include <stdlib.h>
|
7
|
+
#include <stdint.h>
|
8
|
+
#include <string.h>
|
9
|
+
#include <time.h>
|
10
|
+
|
11
|
+
#ifdef __APPLE__
|
12
|
+
#include <CoreFoundation/CoreFoundation.h>
|
13
|
+
#include <IOKit/IOKitLib.h>
|
14
|
+
#endif
|
15
|
+
|
16
|
+
#include "macserial/macserial.h"
|
17
|
+
#include "macserial/modelinfo.h"
|
18
|
+
#include "macserial/macserial.c"
|
19
|
+
#include "macserial/modelinfo_autogen.h"
|
20
|
+
|
21
|
+
VALUE rb_mMacserialrb;
|
22
|
+
|
23
|
+
static VALUE
|
24
|
+
models()
|
25
|
+
{
|
26
|
+
VALUE obj = rb_ary_new_capa(APPLE_MODEL_MAX);
|
27
|
+
|
28
|
+
for (int32_t idx = 0; idx < APPLE_MODEL_MAX; idx++) {
|
29
|
+
rb_ary_push(obj, rb_str_new_cstr(ApplePlatformData[idx].productName));
|
30
|
+
}
|
31
|
+
return obj;
|
32
|
+
}
|
33
|
+
|
34
|
+
static SERIALINFO
|
35
|
+
get_serialinfo(VALUE model)
|
36
|
+
{
|
37
|
+
SERIALINFO info = {
|
38
|
+
.modelIndex = -1,
|
39
|
+
.decodedYear = -1,
|
40
|
+
.decodedWeek = -1,
|
41
|
+
.decodedCopy = -1,
|
42
|
+
.decodedLine = -1
|
43
|
+
};
|
44
|
+
|
45
|
+
// model
|
46
|
+
for (int32_t idx = 0; idx < APPLE_MODEL_MAX; idx++) {
|
47
|
+
if (strcmp(ApplePlatformData[idx].productName, rb_string_value_cstr(&model)) == 0)
|
48
|
+
{
|
49
|
+
info.modelIndex = idx;
|
50
|
+
break;
|
51
|
+
}
|
52
|
+
}
|
53
|
+
|
54
|
+
return info;
|
55
|
+
}
|
56
|
+
|
57
|
+
static VALUE
|
58
|
+
generate(int argc, VALUE *argv, VALUE self)
|
59
|
+
{
|
60
|
+
VALUE model = Qnil;
|
61
|
+
VALUE obj = rb_hash_new();
|
62
|
+
|
63
|
+
for (int i = 0; i < argc; ++i)
|
64
|
+
{
|
65
|
+
model = rb_hash_aref(argv[i], rb_to_symbol( rb_str_new2("model") ));
|
66
|
+
}
|
67
|
+
|
68
|
+
if (NIL_P(model))
|
69
|
+
{
|
70
|
+
rb_raise(rb_eTypeError, "model is required!");
|
71
|
+
exit(0);
|
72
|
+
}
|
73
|
+
|
74
|
+
SERIALINFO info = get_serialinfo(model);
|
75
|
+
|
76
|
+
if (get_serial(&info)) {
|
77
|
+
char mlb[MLB_MAX_SIZE];
|
78
|
+
char ssn[MLB_MAX_SIZE];
|
79
|
+
|
80
|
+
get_mlb(&info, mlb, MLB_MAX_SIZE);
|
81
|
+
sprintf(ssn, "%s%s%s%s%s", info.country, info.year, info.week, info.line, info.model);
|
82
|
+
|
83
|
+
VALUE productName = rb_str_new2(ApplePlatformData[info.modelIndex].productName);
|
84
|
+
VALUE SystemSerialNumber = rb_str_new2(ssn);
|
85
|
+
VALUE MLB = rb_str_new2(mlb);
|
86
|
+
|
87
|
+
rb_hash_aset(obj, rb_to_symbol( rb_str_new2("productName") ), productName);
|
88
|
+
rb_hash_aset(obj, rb_to_symbol( rb_str_new2("SystemSerialNumber") ), SystemSerialNumber);
|
89
|
+
rb_hash_aset(obj, rb_to_symbol( rb_str_new2("MLB") ), MLB);
|
90
|
+
}
|
91
|
+
|
92
|
+
return obj;
|
93
|
+
}
|
94
|
+
|
95
|
+
void
|
96
|
+
Init_macserialrb(void)
|
97
|
+
{
|
98
|
+
rb_mMacserialrb = rb_define_module("Macserialrb");
|
99
|
+
|
100
|
+
rb_define_module_function(rb_mMacserialrb, "models", models, 0);
|
101
|
+
rb_define_module_function(rb_mMacserialrb, "generate", generate, -1);
|
102
|
+
}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
#ifndef MACSERIALRB_H
|
2
|
+
#define MACSERIALRB_H 1
|
3
|
+
|
4
|
+
#include "ruby.h"
|
5
|
+
#include "macserial/macserial.h"
|
6
|
+
#include "macserial/modelinfo.h"
|
7
|
+
|
8
|
+
static VALUE models();
|
9
|
+
static VALUE generate(int argc, VALUE *argv, VALUE self);
|
10
|
+
static SERIALINFO get_serialinfo(const VALUE model);
|
11
|
+
|
12
|
+
#endif /* MACSERIALRB_H */
|
data/lib/macserialrb.rb
ADDED
data/macserialrb.gemspec
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
require_relative 'lib/macserialrb/version'
|
2
|
+
|
3
|
+
Gem::Specification.new do |spec|
|
4
|
+
spec.name = "macserialrb"
|
5
|
+
spec.version = Macserialrb::VERSION
|
6
|
+
spec.authors = ["csrutil"]
|
7
|
+
spec.email = ["csrutil@protonmail.com"]
|
8
|
+
|
9
|
+
spec.summary = %q{macserialrb is a tool that obtains and decodes Mac serial number and board identifier to provide more information about the production of your hardware. }
|
10
|
+
spec.description = %q{macserialrb is a tool that obtains and decodes Mac serial number and board identifier to provide more information about the production of your hardware. }
|
11
|
+
spec.homepage = "https://github.com/csrutil/macserialrb"
|
12
|
+
spec.license = "MIT"
|
13
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
|
14
|
+
|
15
|
+
# spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
|
16
|
+
|
17
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
18
|
+
spec.metadata["source_code_uri"] = "https://github.com/csrutil/macserialrb"
|
19
|
+
spec.metadata["changelog_uri"] = "https://github.com/csrutil/macserialrb/README.md"
|
20
|
+
|
21
|
+
# Specify which files should be added to the gem when it is released.
|
22
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
23
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
24
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
25
|
+
end
|
26
|
+
spec.bindir = "exe"
|
27
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
28
|
+
spec.require_paths = ["lib"]
|
29
|
+
spec.extensions = ["ext/macserialrb/extconf.rb"]
|
30
|
+
end
|
metadata
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: macserialrb
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- csrutil
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-11-25 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: 'macserialrb is a tool that obtains and decodes Mac serial number and
|
14
|
+
board identifier to provide more information about the production of your hardware. '
|
15
|
+
email:
|
16
|
+
- csrutil@protonmail.com
|
17
|
+
executables:
|
18
|
+
- macserialrb
|
19
|
+
extensions:
|
20
|
+
- ext/macserialrb/extconf.rb
|
21
|
+
extra_rdoc_files: []
|
22
|
+
files:
|
23
|
+
- ".gitignore"
|
24
|
+
- ".rspec"
|
25
|
+
- ".travis.yml"
|
26
|
+
- CODE_OF_CONDUCT.md
|
27
|
+
- Gemfile
|
28
|
+
- Gemfile.lock
|
29
|
+
- LICENSE.txt
|
30
|
+
- README.md
|
31
|
+
- Rakefile
|
32
|
+
- bin/console
|
33
|
+
- bin/setup
|
34
|
+
- exe/macserialrb
|
35
|
+
- ext/macserialrb/extconf.rb
|
36
|
+
- ext/macserialrb/macserial/FORMAT.md
|
37
|
+
- ext/macserialrb/macserial/Makefile
|
38
|
+
- ext/macserialrb/macserial/README.md
|
39
|
+
- ext/macserialrb/macserial/cccdump.py
|
40
|
+
- ext/macserialrb/macserial/macserial.c
|
41
|
+
- ext/macserialrb/macserial/macserial.h
|
42
|
+
- ext/macserialrb/macserial/modelinfo.h
|
43
|
+
- ext/macserialrb/macserial/modelinfo_autogen.h
|
44
|
+
- ext/macserialrb/macserialrb.c
|
45
|
+
- ext/macserialrb/macserialrb.h
|
46
|
+
- lib/macserialrb.rb
|
47
|
+
- lib/macserialrb/version.rb
|
48
|
+
- macserialrb.gemspec
|
49
|
+
homepage: https://github.com/csrutil/macserialrb
|
50
|
+
licenses:
|
51
|
+
- MIT
|
52
|
+
metadata:
|
53
|
+
homepage_uri: https://github.com/csrutil/macserialrb
|
54
|
+
source_code_uri: https://github.com/csrutil/macserialrb
|
55
|
+
changelog_uri: https://github.com/csrutil/macserialrb/README.md
|
56
|
+
post_install_message:
|
57
|
+
rdoc_options: []
|
58
|
+
require_paths:
|
59
|
+
- lib
|
60
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: 2.3.0
|
65
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
requirements: []
|
71
|
+
rubygems_version: 3.1.4
|
72
|
+
signing_key:
|
73
|
+
specification_version: 4
|
74
|
+
summary: macserialrb is a tool that obtains and decodes Mac serial number and board
|
75
|
+
identifier to provide more information about the production of your hardware.
|
76
|
+
test_files: []
|