check-msdefender 1.0.0__py3-none-any.whl

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.
Files changed (33) hide show
  1. check_msdefender/__init__.py +5 -0
  2. check_msdefender/__main__.py +6 -0
  3. check_msdefender/check_msdefender.py +7 -0
  4. check_msdefender/cli/__init__.py +15 -0
  5. check_msdefender/cli/__main__.py +6 -0
  6. check_msdefender/cli/commands/__init__.py +17 -0
  7. check_msdefender/cli/commands/detail.py +72 -0
  8. check_msdefender/cli/commands/lastseen.py +61 -0
  9. check_msdefender/cli/commands/machines.py +55 -0
  10. check_msdefender/cli/commands/onboarding.py +61 -0
  11. check_msdefender/cli/commands/vulnerabilities.py +61 -0
  12. check_msdefender/cli/decorators.py +18 -0
  13. check_msdefender/cli/handlers.py +46 -0
  14. check_msdefender/core/__init__.py +1 -0
  15. check_msdefender/core/auth.py +46 -0
  16. check_msdefender/core/config.py +40 -0
  17. check_msdefender/core/defender.py +176 -0
  18. check_msdefender/core/exceptions.py +31 -0
  19. check_msdefender/core/logging_config.py +116 -0
  20. check_msdefender/core/nagios.py +169 -0
  21. check_msdefender/services/__init__.py +1 -0
  22. check_msdefender/services/detail_service.py +77 -0
  23. check_msdefender/services/lastseen_service.py +70 -0
  24. check_msdefender/services/machines_service.py +82 -0
  25. check_msdefender/services/models.py +49 -0
  26. check_msdefender/services/onboarding_service.py +59 -0
  27. check_msdefender/services/vulnerabilities_service.py +163 -0
  28. check_msdefender-1.0.0.dist-info/METADATA +396 -0
  29. check_msdefender-1.0.0.dist-info/RECORD +33 -0
  30. check_msdefender-1.0.0.dist-info/WHEEL +5 -0
  31. check_msdefender-1.0.0.dist-info/entry_points.txt +2 -0
  32. check_msdefender-1.0.0.dist-info/licenses/LICENSE +21 -0
  33. check_msdefender-1.0.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,396 @@
1
+ Metadata-Version: 2.4
2
+ Name: check-msdefender
3
+ Version: 1.0.0
4
+ Summary: A Nagios plugin for monitoring Microsoft Defender API endpoints
5
+ Author-email: ldvchosal <ldvchosal@github.com>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/lduchosal/check_msdefender
8
+ Project-URL: Bug Reports, https://github.com/lduchosal/check_msdefender/issues
9
+ Project-URL: Source, https://github.com/lduchosal/check_msdefender
10
+ Project-URL: Documentation, https://github.com/lduchosal/check_msdefender/blob/main/README.md
11
+ Keywords: nagios,monitoring,microsoft,graph,api,azure
12
+ Classifier: Development Status :: 5 - Production/Stable
13
+ Classifier: Intended Audience :: System Administrators
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Operating System :: OS Independent
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.9
18
+ Classifier: Programming Language :: Python :: 3.10
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Topic :: System :: Monitoring
21
+ Classifier: Topic :: System :: Systems Administration
22
+ Requires-Python: >=3.9
23
+ Description-Content-Type: text/markdown
24
+ License-File: LICENSE
25
+ Requires-Dist: nagiosplugin>=1.4.0
26
+ Requires-Dist: azure-identity>=1.12.0
27
+ Requires-Dist: click<9.0,>=8.0
28
+ Provides-Extra: dev
29
+ Requires-Dist: pytest>=6.0; extra == "dev"
30
+ Requires-Dist: pytest-cov>=2.0; extra == "dev"
31
+ Requires-Dist: pytest-asyncio>=1.0; extra == "dev"
32
+ Requires-Dist: black>=21.0; extra == "dev"
33
+ Requires-Dist: flake8>=3.8; extra == "dev"
34
+ Requires-Dist: mypy>=0.800; extra == "dev"
35
+ Requires-Dist: twine>=6.2.0; extra == "dev"
36
+ Dynamic: license-file
37
+
38
+ # 🛡️ Check MS Defender
39
+
40
+ [![Python Version](https://img.shields.io/badge/python-3.9+-blue.svg)](https://python.org)
41
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
42
+ [![Build Status](https://img.shields.io/badge/build-passing-brightgreen.svg)](https://github.com/lduchosal/check_msdefender)
43
+
44
+ A comprehensive **Nagios plugin** for monitoring Microsoft Defender for Endpoint API endpoints. Built with modern Python practices and designed for enterprise monitoring environments.
45
+
46
+ ## ✨ Features
47
+
48
+ - 🔐 **Dual Authentication** - Support for Client Secret and Certificate-based authentication
49
+ - 🎯 **Multiple Endpoints** - Monitor onboarding status, last seen, vulnerabilities, and machine details
50
+ - 📊 **Nagios Compatible** - Standard exit codes and performance data output
51
+ - 🏗️ **Clean Architecture** - Modular design with testable components
52
+ - 🔧 **Flexible Configuration** - File-based configuration with sensible defaults
53
+ - 📈 **Verbose Logging** - Multi-level debugging support
54
+ - 🐍 **Modern Python** - Built with Python 3.9+ using type hints and async patterns
55
+
56
+ ## 🚀 Quick Start
57
+
58
+ ### Installation
59
+
60
+ ```bash
61
+ # Create virtual environment (recommended)
62
+ python -m venv /usr/local/libexec/nagios/check_msdefender
63
+ source /usr/local/libexec/nagios/check_msdefender/bin/activate
64
+
65
+ # Install from source
66
+ pip install git+https://github.com/lduchosal/check_msdefender.git
67
+ ```
68
+
69
+ ### Basic Usage
70
+
71
+ ```bash
72
+ # Check machine onboarding status
73
+ check_msdefender onboarding -d machine.domain.tld
74
+
75
+ # Check last seen (with custom thresholds)
76
+ check_msdefender lastseen -d machine.domain.tld -W 7 -C 30
77
+
78
+ # Check vulnerabilities
79
+ check_msdefender vulnerabilities -d machine.domain.tld -W 10 -C 100
80
+
81
+ # List all machines
82
+ check_msdefender machines
83
+
84
+ # Get detailed machine info
85
+ check_msdefender detail -d machine.domain.tld
86
+ ```
87
+
88
+ ## 📋 Available Commands
89
+
90
+ | Command | Description | Default Thresholds |
91
+ |---------|-------------|-------------------|
92
+ | `onboarding` | Check machine onboarding status | W:1, C:2 |
93
+ | `lastseen` | Days since machine last seen | W:7, C:30 |
94
+ | `vulnerabilities` | Vulnerability score calculation | W:10, C:100 |
95
+ | `machines` | List all machines | W:10, C:25 |
96
+ | `detail` | Get detailed machine information | - |
97
+
98
+ ### Vulnerability Scoring
99
+
100
+ The vulnerability score is calculated as:
101
+ - **Critical vulnerabilities** × 100
102
+ - **High vulnerabilities** × 10
103
+ - **Medium vulnerabilities** × 5
104
+ - **Low vulnerabilities** × 1
105
+
106
+ ### Onboarding Status Values
107
+
108
+ - `0` - Onboarded ✅
109
+ - `1` - InsufficientInfo ⚠️
110
+ - `2` - Unknown ❌
111
+
112
+ ## ⚙️ Configuration
113
+
114
+ ### Authentication Setup
115
+
116
+ Create `check_msdefender.ini` in your Nagios directory or current working directory:
117
+
118
+ #### Client Secret Authentication
119
+ ```ini
120
+ [auth]
121
+ client_id = your-application-client-id
122
+ client_secret = your-client-secret
123
+ tenant_id = your-azure-tenant-id
124
+
125
+ [settings]
126
+ timeout = 5
127
+ ```
128
+
129
+ #### Certificate Authentication
130
+ ```ini
131
+ [auth]
132
+ client_id = your-application-client-id
133
+ tenant_id = your-azure-tenant-id
134
+ certificate_path = /path/to/certificate.pem
135
+ private_key_path = /path/to/private_key.pem
136
+
137
+ [settings]
138
+ timeout = 5
139
+ ```
140
+
141
+ ### Microsoft Defender API Setup
142
+
143
+ 1. **Register Application** in Azure Active Directory
144
+ 2. **Grant API Permissions**:
145
+ - `Machine.Read.All`
146
+ - `Vulnerability.Read`
147
+ - `Vulnerability.Read.All`
148
+ 3. **Create Authentication** (Secret or Certificate)
149
+ 4. **Note Credentials** (Client ID, Tenant ID, Secret/Certificate)
150
+
151
+ 📚 [Complete API Setup Guide](https://learn.microsoft.com/en-us/defender-endpoint/api/api-hello-world)
152
+
153
+ ## 🔧 Command Line Options
154
+
155
+ | Option | Description | Example |
156
+ |--------|-------------|---------|
157
+ | `-c, --config` | Configuration file path | `-c /custom/path/config.ini` |
158
+ | `-m, --machineId` | Machine ID (GUID) | `-m "12345678-1234-1234-1234-123456789abc"` |
159
+ | `-d, --computerDnsName` | Computer DNS Name (FQDN) | `-d "server.domain.com"` |
160
+ | `-W, --warning` | Warning threshold | `-W 10` |
161
+ | `-C, --critical` | Critical threshold | `-C 100` |
162
+ | `-v, --verbose` | Verbosity level | `-v`, `-vv`, `-vvv` |
163
+ | `--version` | Show version | `--version` |
164
+
165
+ ## 🏢 Nagios Integration
166
+
167
+ ### Command Definitions
168
+
169
+ ```cfg
170
+ # Microsoft Defender Commands
171
+ define command {
172
+ command_name check_defender_onboarding
173
+ command_line $USER1$/check_msdefender/bin/check_msdefender onboarding -d $HOSTALIAS$
174
+ }
175
+
176
+ define command {
177
+ command_name check_defender_lastseen
178
+ command_line $USER1$/check_msdefender/bin/check_msdefender lastseen -d $HOSTALIAS$ -W 7 -C 30
179
+ }
180
+
181
+ define command {
182
+ command_name check_defender_vulnerabilities
183
+ command_line $USER1$/check_msdefender/bin/check_msdefender vulnerabilities -d $HOSTALIAS$ -W 10 -C 100
184
+ }
185
+ ```
186
+
187
+ ### Service Definitions
188
+
189
+ ```cfg
190
+ # Microsoft Defender Services
191
+ define service {
192
+ use generic-service
193
+ service_description DEFENDER_ONBOARDING
194
+ check_command check_defender_onboarding
195
+ hostgroup_name msdefender
196
+ }
197
+
198
+ define service {
199
+ use generic-service
200
+ service_description DEFENDER_LASTSEEN
201
+ check_command check_defender_lastseen
202
+ hostgroup_name msdefender
203
+ }
204
+
205
+ define service {
206
+ use generic-service
207
+ service_description DEFENDER_VULNERABILITIES
208
+ check_command check_defender_vulnerabilities
209
+ hostgroup_name msdefender
210
+ }
211
+ ```
212
+
213
+ ## 🏗️ Architecture
214
+
215
+ This plugin follows **clean architecture** principles with clear separation of concerns:
216
+
217
+ ```
218
+ check_msdefender/
219
+ ├── 📁 cli/ # Command-line interface
220
+ │ ├── commands/ # Individual command handlers
221
+ │ │ ├── onboarding.py # Onboarding status command
222
+ │ │ ├── lastseen.py # Last seen command
223
+ │ │ ├── vulnerabilities.py # Vulnerabilities command
224
+ │ │ ├── machines.py # List machines command
225
+ │ │ └── detail.py # Machine detail command
226
+ │ ├── decorators.py # Common CLI decorators
227
+ │ └── handlers.py # CLI handlers
228
+ ├── 📁 core/ # Core business logic
229
+ │ ├── auth.py # Authentication management
230
+ │ ├── config.py # Configuration handling
231
+ │ ├── defender.py # Defender API client
232
+ │ ├── exceptions.py # Custom exceptions
233
+ │ ├── nagios.py # Nagios plugin framework
234
+ │ └── logging_config.py # Logging configuration
235
+ ├── 📁 services/ # Business services
236
+ │ ├── onboarding_service.py # Onboarding business logic
237
+ │ ├── lastseen_service.py # Last seen business logic
238
+ │ ├── vulnerabilities_service.py # Vulnerability business logic
239
+ │ ├── machines_service.py # Machines business logic
240
+ │ ├── detail_service.py # Detail business logic
241
+ │ └── models.py # Data models
242
+ └── 📁 tests/ # Comprehensive test suite
243
+ ├── unit/ # Unit tests
244
+ ├── integration/ # Integration tests
245
+ └── fixtures/ # Test fixtures
246
+ ```
247
+
248
+ ### Key Design Principles
249
+
250
+ - **🎯 Single Responsibility** - Each module has one clear purpose
251
+ - **🔌 Dependency Injection** - Easy testing and mocking
252
+ - **🧪 Testable** - Comprehensive test coverage
253
+ - **📈 Extensible** - Easy to add new commands and features
254
+ - **🔒 Secure** - No secrets in code, proper credential handling
255
+
256
+ ## 🧪 Development
257
+
258
+ ### Development Setup
259
+
260
+ ```bash
261
+ # Clone repository
262
+ git clone https://github.com/lduchosal/check_msdefender.git
263
+ cd check_msdefender
264
+
265
+ # Create development environment
266
+ python -m venv .venv
267
+ source .venv/bin/activate # Windows: .venv\Scripts\activate
268
+
269
+ # Install in development mode
270
+ pip install -e .
271
+ pip install -r requirements-dev.txt
272
+ ```
273
+
274
+ ### Code Quality Tools
275
+
276
+ ```bash
277
+ # Format code
278
+ black check_msdefender/
279
+
280
+ # Lint code
281
+ flake8 check_msdefender/
282
+
283
+ # Type checking
284
+ mypy check_msdefender/
285
+
286
+ # Run tests
287
+ pytest tests/ -v --cov=check_msdefender
288
+ ```
289
+
290
+ ### Building & Publishing
291
+
292
+ ```bash
293
+ # Build package
294
+ python -m build
295
+
296
+ # Test installation
297
+ pip install dist/*.whl
298
+
299
+ # Publish to PyPI
300
+ python -m twine upload dist/*
301
+ ```
302
+
303
+ ## 🔍 Output Examples
304
+
305
+ ### Successful Check
306
+ ```
307
+ DEFENDER OK - Onboarding status: 0 (Onboarded) | onboarding=0;1;2;0;2
308
+ ```
309
+
310
+ ### Warning State
311
+ ```
312
+ DEFENDER WARNING - Last seen: 10 days ago | lastseen=10;7;30;0;
313
+ ```
314
+
315
+ ### Critical State
316
+ ```
317
+ DEFENDER CRITICAL - Vulnerability score: 150 (1 Critical, 5 High) | vulnerabilities=150;10;100;0;
318
+ ```
319
+
320
+ ## 🔧 Troubleshooting
321
+
322
+ ### Common Issues
323
+
324
+ | Issue | Solution |
325
+ |-------|----------|
326
+ | **Authentication Errors** | Verify Azure app permissions and credentials |
327
+ | **Network Connectivity** | Check firewall rules for Microsoft endpoints |
328
+ | **Import Errors** | Ensure all dependencies are installed |
329
+ | **Configuration Issues** | Validate config file syntax and paths |
330
+
331
+ ### Debug Mode
332
+
333
+ Enable verbose logging for detailed troubleshooting:
334
+
335
+ ```bash
336
+ # Maximum verbosity
337
+ check_msdefender vulnerabilities -d machine.domain.tld -vvv
338
+
339
+ # Check specific configuration
340
+ check_msdefender onboarding -c /path/to/config.ini -d machine.domain.tld -vv
341
+ ```
342
+
343
+ ### Required Network Access
344
+
345
+ Ensure connectivity to:
346
+ - `login.microsoftonline.com`
347
+ - `api.securitycenter.microsoft.com`
348
+ - `api-eu.securitycenter.microsoft.com`
349
+ - `api-eu3.securitycenter.microsoft.com`
350
+ - `api-uk.securitycenter.microsoft.com`
351
+
352
+ ## 📊 Exit Codes
353
+
354
+ | Code | Status | Description |
355
+ |------|--------|-------------|
356
+ | `0` | OK | Value within acceptable range |
357
+ | `1` | WARNING | Value exceeds warning threshold |
358
+ | `2` | CRITICAL | Value exceeds critical threshold |
359
+ | `3` | UNKNOWN | Error occurred during execution |
360
+
361
+ ## 🤝 Contributing
362
+
363
+ We welcome contributions! Here's how to get started:
364
+
365
+ 1. **Fork** the repository
366
+ 2. **Create** a feature branch (`git checkout -b feature/amazing-feature`)
367
+ 3. **Commit** your changes (`git commit -m 'Add amazing feature'`)
368
+ 4. **Push** to the branch (`git push origin feature/amazing-feature`)
369
+ 5. **Open** a Pull Request
370
+
371
+ ### Development Guidelines
372
+
373
+ - Follow [PEP 8](https://pep8.org/) style guide
374
+ - Add tests for new features
375
+ - Update documentation as needed
376
+ - Ensure all tests pass before submitting
377
+
378
+ ## 📄 License
379
+
380
+ This project is licensed under the **MIT License** - see the [LICENSE](LICENSE) file for details.
381
+
382
+ ## 🙏 Acknowledgments
383
+
384
+ - Built with [nagiosplugin](https://nagiosplugin.readthedocs.io/) framework
385
+ - Uses [Azure Identity SDK](https://docs.microsoft.com/python/api/azure-identity/) for authentication
386
+ - Powered by [Click](https://click.palletsprojects.com/) for CLI interface
387
+
388
+ ---
389
+
390
+ <div align="center">
391
+
392
+ **[⭐ Star this repository](https://github.com/lduchosal/check_msdefender)** if you find it useful!
393
+
394
+ [🐛 Report Bug](https://github.com/lduchosal/check_msdefender/issues) • [💡 Request Feature](https://github.com/lduchosal/check_msdefender/issues) • [📖 Documentation](https://github.com/lduchosal/check_msdefender/blob/main/README.md)
395
+
396
+ </div>
@@ -0,0 +1,33 @@
1
+ check_msdefender/__init__.py,sha256=HDn1Ub7Ohqkfko0kUPT8w7HqU52jXwo-leSTImO1x_k,161
2
+ check_msdefender/__main__.py,sha256=TuNsRSdnkQm9OdBTAwD5aB2zV_Irc50WgylVWhrfnLY,124
3
+ check_msdefender/check_msdefender.py,sha256=M_i2CIZWxfPisxxiWTFqGVAjoAS89euyVbbbtmaikQk,148
4
+ check_msdefender/cli/__init__.py,sha256=NWaS5ZI9_252AcReugF_WGPMOvQ_B7sC_s3pSrGujcI,291
5
+ check_msdefender/cli/__main__.py,sha256=TuNsRSdnkQm9OdBTAwD5aB2zV_Irc50WgylVWhrfnLY,124
6
+ check_msdefender/cli/decorators.py,sha256=iMd2zrQI2SVSTa9hD8w4AjFqsctFaWUIzdT8_cSTVG8,772
7
+ check_msdefender/cli/handlers.py,sha256=RAUsH8gI_fQV4ZNvs3Ih1lCoSOSortpVWRhyQHXe6yU,1418
8
+ check_msdefender/cli/commands/__init__.py,sha256=mKF0lp4uMI9VYQGFg7N4W74GOLmACeXWVxpReLvre34,644
9
+ check_msdefender/cli/commands/detail.py,sha256=k2pDCGXtiGbKmXxDYUvkmUgmQA60jKdIzTY-Jt160jE,2532
10
+ check_msdefender/cli/commands/lastseen.py,sha256=TJHArqLkQtXF1XL5U5Dk_ExfVhK95C2TJQg0WBHbyp8,1891
11
+ check_msdefender/cli/commands/machines.py,sha256=uHpxc2j4iJnbhp2MRAW-KR1K0NPrqdqQtJbGgSRO5tk,1737
12
+ check_msdefender/cli/commands/onboarding.py,sha256=I_hKWngVdSITkEFQ3pDE2oIGlYsCurG7XbCi_fKNoAM,1925
13
+ check_msdefender/cli/commands/vulnerabilities.py,sha256=EzllIUw67qAnarKVTy-zx4nWVHDxg2icRsC1irdBhnU,1944
14
+ check_msdefender/core/__init__.py,sha256=naBiEkixiWTuHU3GENk8fqC8H3p_hkzRsmSY2uiM_TQ,47
15
+ check_msdefender/core/auth.py,sha256=7mkGmhGHy4t38O0e4Rz7dQ52xfMbK3IUXMlw3u83aB4,1585
16
+ check_msdefender/core/config.py,sha256=IoWBL_DB110F4i6hFfli6iFDBXx57dHh32lCuLkcgNk,1170
17
+ check_msdefender/core/defender.py,sha256=5_Mq1p9WxlttQeeqnY9RCWgDbf2Wbagw4LUFY2aqrrA,7315
18
+ check_msdefender/core/exceptions.py,sha256=X4s_XM64SEVSs-4mGKqnF8xXwGFY3E0buvkgRNuCCX4,600
19
+ check_msdefender/core/logging_config.py,sha256=27gLjvbP_AgedDQWZQEFfn_CGn5y6HcJQlI5jlxQHow,4067
20
+ check_msdefender/core/nagios.py,sha256=nZSo-1VV57WFSieyRp456tw_OqpjXOoM_MEjnLkgxlE,6600
21
+ check_msdefender/services/__init__.py,sha256=_fiKXxcz263IghXn9BnUWDKPgedhUPoSakEN3tBd2SU,44
22
+ check_msdefender/services/detail_service.py,sha256=i-jXubNfsNf-fS6ba2MQecN886GzU0UC40DwS3HrnnY,3382
23
+ check_msdefender/services/lastseen_service.py,sha256=LiNVeUbAoMzowMvE90P7zCtKFHBLbIDp5mmkVHRLwqs,3128
24
+ check_msdefender/services/machines_service.py,sha256=5s5BXB4GUMQ8z3rPy32lybp0DslG0QVhWxm-n_AU97k,3119
25
+ check_msdefender/services/models.py,sha256=8p8UHh86h9TjeYahhu_qCBpfuGGS3tObhtlpYk9kB8I,985
26
+ check_msdefender/services/onboarding_service.py,sha256=RIOsvALCoKV0YqnCHKYRkelSPrO-F-6vNBLlto4MpiI,2686
27
+ check_msdefender/services/vulnerabilities_service.py,sha256=ikD6E-hg7LtvCiTg7cTCqGSTly6Wgtql82NJD81D2n0,6812
28
+ check_msdefender-1.0.0.dist-info/licenses/LICENSE,sha256=kW3DwIsKc9HVYdS4f4tI6sLo-EPqBQbz-WmuvHU4Nak,1065
29
+ check_msdefender-1.0.0.dist-info/METADATA,sha256=feCju74gUaR5YTuoshCDVnYagetTZWpFt64Itep5ckw,12750
30
+ check_msdefender-1.0.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
31
+ check_msdefender-1.0.0.dist-info/entry_points.txt,sha256=EMA_qKSvf5dC6yRrajd0W-UgS3C5Ce0o04i3_5A34Cs,63
32
+ check_msdefender-1.0.0.dist-info/top_level.txt,sha256=0XgjD7gBWFImxE44zghS94ZGdonRZlfVEpfspnBnG5A,17
33
+ check_msdefender-1.0.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.9.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ check_msdefender = check_msdefender.cli:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 ldvchosal
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1 @@
1
+ check_msdefender